Ios 阵列的内存地址
请帮帮我。我完全搞不懂这个记忆地址Ios 阵列的内存地址,ios,objective-c,arrays,Ios,Objective C,Arrays,请帮帮我。我完全搞不懂这个记忆地址 NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3", nil]; NSLog(@"Address of array = %p",&arr); NSLog(@"Array's element Address = %p",arr); NSLog(@"Address 0th element %p",[arr objectA
NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3", nil];
NSLog(@"Address of array = %p",&arr);
NSLog(@"Array's element Address = %p",arr);
NSLog(@"Address 0th element %p",[arr objectAtIndex:0]);
NSLog(@"Address of array =%lx",(long)&arr);
NSLog(@"Array's element Address = %lx",(long)arr);
NSLog(@"Address 0th element %lx",(long)[arr objectAtIndex:0]);
**Output**
Address of array = 0xbfffd804
Array's element Address = 0x866f340
Address 0th element 0x4748
Address of array =bfffd804
Array's element Address = 866f340
Address 0th element 4748
我得到了这个输出,但我对第二和第三个输出感到困惑,因为根据我的知识,第二和第三个输出应该是相同的。所以请任何人都给我解释一下。提前感谢。如果这是一个普通C数组,您可能是对的,但是您的
arr
是一个类的实例,而不是NSMutableArray用于存储其对象的任何数据结构的基址(可能也不是普通C数组)。您的意思是arr与第0项的地址不同。如果是恒定变量。是吗?@DharmbirChoudhary:是的,NSArray对象的地址与数组中第一项的地址不同,事实上两者之间没有关系。@Chuck你的意思是objective-c和“c”语言概念在这种情况下是不同的。我认为在c语言中,数组的地址与数组中第一项的地址相同。是的,c数组是一种原始数据结构,它将其内容存储在连续的内存地址中。NSArray/NSMutableArray是一个Objective-C类,它有一些其他内部数据结构来存储它所包含的对象,以及一组允许它运行的其他实例变量。这些东西的内存布局实际上是任意的。