Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 阵列的内存地址_Ios_Objective C_Arrays - Fatal编程技术网

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类,它有一些其他内部数据结构来存储它所包含的对象,以及一组允许它运行的其他实例变量。这些东西的内存布局实际上是任意的。