-1

这是我的测试代码

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

4

2 回答 2

3

arrNSArray对象的地址。

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

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

于 2013-07-16T05:01:03.163 回答
1

由于存储在对象中的NSArray对象也是一个对象,这与我们将值存储在数组中的 C 数组不同,因此在目标 C 中,每个对象将位于完全不同的位置。

于 2013-07-16T05:10:10.670 回答