Dirección de la memory de la matriz

Por favor, ayúdame. Estoy totalmente confundido en esta dirección de memory.

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 

Estoy obteniendo este resultado, pero estoy confundido con el segundo y tercer resultado porque de acuerdo con mi segundo y tercer resultado, el conocimiento debería ser el mismo. Entonces, cualquiera puede explicarme. Gracias por adelantado.

Si se tratara de una matriz C simple, puede que tenga razón, pero su arr es una instancia de una class, no la dirección base de la estructura de datos que NSMutableArray utiliza para almacenar sus objects (que probablemente no sea una matriz C simple).