choupiaoyi 2018-06-27
1.我们知道c语言中对于指针的操作是可以直接通过打印指针而得到对象的地址的,如下:
char *s = "abc"; printf("s的值:%s",s); printf("s的地址:%p",s); 1 2 3 4
打印结果为:
s的值:abc s的地址:0x107f3ced8 1 2 3
我们知道s其实是指向数据常量区“abc”的一个指针,我们可以通过*s来获取字符串首字符的值:
printf("首字符为:%c",*s); 1 2
打印结果为:
首字符为:a 1 2
2. 如此我们联想oc当中的字符串NSString,现在我们用oc的方式初始化一个字符串:
NSString *str = @"abc"; NSLog("str的值为:%@",str); NSLog("str的地址为:%p",str); 1 2 3 4
打印结果如下:
str的值为:abc str的地址为:0x1027510c8 1 2 3
3. 通过以上结果分析,我们在打印oc中字符串的值的时候为什么不能像c语言中直接使用指针*str,而是直接用%@打印str就获得了对象的值了呢,为什么不是这样的:
NSLog("str的值为:%@",*str); 1 2
例如下面的结构体:
typedef struct Object { char *string; } *Object; 1 2 3 4
打印的时候会进行如下:
Object obj = malloc(sizeof(Object)); obj->string = "Hello"; NSLog(@"%s", obj->string); 1 2 3 4
所以oc的%@也并不是意味着值的打印,它代表的是打印对象。