使用*运算符

时间:2016-07-13 07:54:10

标签: ios objective-c

int i = 17;
int *addressOfI = &i;
printf("the int stored at addressOfI is %d\n", *addressOfI);

问题是:如果我可以使用*运算符获取存储在addressOfI中的数据,为什么它不能用于NSString类型?如下:

NSString *string = @"Hello world!"
printf("the NSString stored at string is %@\n", *string);

1 个答案:

答案 0 :(得分:1)

  

为什么它不适用于NSString类型?

因为NSString是Objective-C对象而不是基本类型。 NSString *指针实际上指向struct objc_object,它为对象系统提供框架。你可以"看"这个框架中的一些原始类型(即objc_object的成员)但它应该是普通开发人员的黑盒子

第二段代码崩溃的实际原因是%@格式说明符期望在您传入的对象上调用description方法作为参数,并且您已取消引用该对象指针它不再是有效的对象指针。