Я начал с Задачи C, но я не в состоянии понять само базовое условие.
Ниже мой код
@ interface
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_str;
}
-(void) print;
-(id) init;
@end
@ осуществление
#import "Person.h"
@implementation Person
-(id) init{
self=[super init];
char c[50];
scanf("%s",c);
NSString *xyz=[NSString stringWithUTF8String:c];
NSLog(@"%p",xyz);
_str=xyz;
xyz=@"omg";
NSLog(@"%p",_str);
return self;
}
-(void) print{
NSLog(@"%p",_str);
NSLog(@"%@",_str);
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import <stdio.h>
int main(int argc, const char * argv[]) {
Person *ob=[[Person alloc] init];
[ob print];
return 0;
}
Код очень прост:
- Получить ввод из консоли и назначить его локальной переменной
xyz
- Назначить
xyz
экземпляру varaible _str
- Изменить значение локальной переменной
xyz
Так как xyz
и _str
в основном являются указателями, я думал, что изменение значения xyz
также изменит значение _str
. Но я не вижу этого, хотя обе переменные указывают на одно и то же место!. Может кто-нибудь объяснить, как на самом деле работает назначение и почему обновление xyz
не влияет на _str
.
Выход:
My_console_input
2018-05-06 22:28:54.714327+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.714833+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.714878+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.715014+0530 learn_objc1[8109:135801] My_console_input
Program ended with exit code: 0