我理解指针使用地址而不是数据本身。这就是为什么我需要使用下面的地址(&)运算符,因为我需要将num的地址分配给指针而不是num(40)的实际值。
int num = 40;
int *numPtr = #
因此我很困惑为什么我能做到这一点。
NSString *str = @"hello";
我创建了一个指针str但是没有给它一个地址我可以为它分配一些数据,一个文字字符串。
我认为指针只能保存内存地址,为什么我能直接为它分配一些数据呢?
对于试图了解指针和物体的人来说,这非常令人困惑。
答案 0 :(得分:4)
如果您没有为其分配文字字符串,@
会使用字符串值NSString
生成hello
个对象。
在大多数C语言中,字符串只是char
的数组,其中char
是一个基本类型,如int
,如您所示。
答案 1 :(得分:1)
你有理由在objective-c
中放一个@字符串文字(当你想要一个NSString而不是一个C字符串时) @"String"
基本上等同于[NSString stringWithCString:"string"]
,它返回一个指向包含值“string”的NSString对象的指针
1
是c类型整数的方式相同,但@1
是表示值1的NSNumber。如果看到@,则表示“这是创建对象的简写”。 (@ []代表NSArrays,@ {}代表NSDictionarys,@(),@ 123,@ YES,@NO代表NSNumbers,@“代表NSString)
答案 2 :(得分:0)
C没有字符串。通常使用char数组来表示它们。
NSString *str = @"hello";
可以被认为是简写(字面意思):
char charArray[] = "hello";
NSString *str = [[NSString alloc] initWithBytes:charArray length:sizeof(charArray) encoding:NSUTF8StringEncoding]; // disregard character encoding for this example
或
unichar bla[] = {'h', 'e', 'l', 'l', 'o'};
str = [[NSString alloc] initWithCharacters:bla length:sizeof(bla)];
因此创建了一个对象,因此你需要一个指针。