NSArray内存地址

时间:2013-07-16 04:58:53

标签: objective-c nsarray

这是我的测试代码

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]有不同的地址?

2 个答案:

答案 0 :(得分:3)

arrNSArray对象的地址。

arr[0]实际上是对[arr objectAtIndex:0]的调用,意味着arr[0]是数组中第一个对象的地址。

与基本C数组不同,NSArray对象将与数组中恰好存在的任何对象处于完全不同的内存地址。

答案 1 :(得分:1)

由于存储在NSArray对象中的对象也是一个对象,而不像我在数组中存储值的C数组,所以在目标C中,每个对象都将处于完全不同的位置