2013-12-13 3 views
5

Пожалуйста, помогите мне. Я полностью смущен в этом адресе памяти.Адрес памяти массива

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 

Я получаю этот выход, но я запутался со вторым и третьим выходом, потому что в соответствии с моим knowldge второго и третьего выхода должна быть такой же. Поэтому, пожалуйста, любой может объяснить мне. Заранее спасибо.

ответ

4

Если это был простой массив C, вы можете быть правы, но ваш arr является экземпляром класса, а не базовым адресом любой структуры данных, которую NSMutableArray использует для хранения своих объектов (что, вероятно, не является простым массивом C, или).

+0

Вы имеете в виду, что адрес имеет другой адрес от 0-го элемента. Если это переменная intanstance. Правильно ? –

+2

@DharmbirChoudhary: Да, адрес объекта NSArray не совпадает с адресом первого элемента массива, и на самом деле нет никакой связи между ними. – Chuck

+0

@ Черт, вы подразумеваете, что в этом случае разные понятия языка c-c и 'c'. Я думаю, что на языке «c» адрес массива совпадает с адресом первого элемента в массиве. –

Смежные вопросы