objective-c - 为什么我可以为指针赋值?

时间:2014-08-25 09:46:59

标签: objective-c pointers object

我理解指针使用地址而不是数据本身。这就是为什么我需要使用下面的地址(&)运算符,因为我需要将num的地址分配给指针而不是num(40)的实际值。

int num = 40;
int *numPtr = #

因此我很困惑为什么我能做到这一点。

NSString *str = @"hello";

我创建了一个指针str但是没有给它一个地址我可以为它分配一些数据,一个文字字符串。

我认为指针只能保存内存地址,为什么我能直接为它分配一些数据呢?

对于试图了解指针和物体的人来说,这非常令人困惑。

3 个答案:

答案 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)];

因此创建了一个对象,因此你需要一个指针。