有如下代码:
LYPerson *p1 = [LYPerson alloc];
NSObject *p2 = [p1 init];
NSObject *p3 = [p2 init];
NSLog(@"%@ - %p -%p", p1, p1, &p1);
NSLog(@"%@ - %p - %p", p2, p2, &p2);
NSLog(@"%@ - %p - %p", p3, p3, &p3);
输出结果为:
<LYPerson: 0x101a287b0> - 0x101a287b0 -0x7ffeefbff508
<LYPerson: 0x101a287b0> - 0x101a287b0 - 0x7ffeefbff510
<LYPerson: 0x101a287b0> - 0x101a287b0 - 0x7ffeefbff500
为什么会用相同的输出,&p1,&p2, &p3的值又各不相同呢?
解:
p1,p2,p3 为同一个对象,即 p1,p2,*p3 指向同一块内存区域,%p 打印的是 p1,p2,p3的对象内存地址, &p1表示,存放p1 指针的内存地址。综上所述,前两个都是打印的 存放对象的地址值,最后一个打印的是 存放指针的地址值
。
网友评论