这是我的测试代码
NSArray *arr = [[NSArray alloc] initWithObjects:@"1", @"2", nil];
NSLog(@"arr: %p", arr);
NSLog(@"arr[0]: %p", arr[0]);
NSLog(@"arr[1]: %p", arr[1]);
在我看来,arr和arr [0]应该有相同的地址
就像这样
int iarr[2] = {2, 5};
printf("iarr: %p\n", iarr);
printf("iarr[0]: %p", &iarr[0]);
iarr: 0xbfffdbec
iarr[0]: 0xbfffdbec
但为什么我使用%p记录地址,它显示如下
2013-07-16 12:51:35.472 TEST[6766:14003] arr: 0x8422f70
2013-07-16 12:51:35.473 TEST[6766:14003] arr[0]: 0x8a5e0
2013-07-16 12:51:35.473 TEST[6766:14003] arr[1]: 0x8a5f0
为什么arr和arr [0]有不同的地址?
答案 0 :(得分:3)
arr
是NSArray
对象的地址。
arr[0]
实际上是对[arr objectAtIndex:0]
的调用,意味着arr[0]
是数组中第一个对象的地址。
与基本C数组不同,NSArray
对象将与数组中恰好存在的任何对象处于完全不同的内存地址。
答案 1 :(得分:1)
由于存储在NSArray
对象中的对象也是一个对象,而不像我在数组中存储值的C数组,所以在目标C中,每个对象都将处于完全不同的位置