2013-07-16 81 views
-1

這裏是我的測試代碼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]); 

在我看來,編曲和常用3 [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]有不同的廣告連衣裙?

+1

這個問題爲什麼被低估?很明顯。它包含演示所要問題的代碼。 – rmaddy

回答

3

arrNSArray對象的地址。

arr[0]真是[arr objectAtIndex:0]呼叫意味着arr[0]是陣列中的第一對象的地址。

與基本C陣列不同,NSArray對象將處於與恰好在陣列中的任何對象完全不同的內存地址。

+0

感謝您的回答 – tom19830924

1

由於存儲在NSArray對象中的對象也是一個對象,與C數組中的值不同,因此在目標C中,每個對象都處於完全不同的位置。