considerar el tamaño de int
es de 4 bytes. Siempre &i
le dará la primera dirección de esos 4 bytes.
Si la arquitectura es poco endian, entonces la dirección inferior tendrá el LSB como a continuación.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 5 | 0 | 0 | 0 |
+------+------+------+------+
Si la arquitectura es big endian, la dirección inferior tendrá el MSB como a continuación.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 0 | 0 | 0 | 5 |
+------+------+------+------+
Así &i
dará LSB dirección de i
si little endian o dará MSB dirección de i
si big endian
En el modo endian mixta también, ya sea pequeña o grande endian se elegirá para cada tarea dinamicamente.
A continuación voluntad lógica le dice que el endianess
int i = 5;
void * ptr = &i;
char * ch = (char *) ptr;
printf("%p", ptr);
if (5 == (*ch))
printf("\nlittle endian\n");
else
printf("\nbig endian\n");
Este comportamiento será el mismo para ambos c
y c++
Es un comportamiento indefinido ** **. La única forma de imprimir 'ptr' es con'% p', o convirtiéndolo a 'intptr_t' y usando la macro de formato de impresión correspondiente. –
¿No se trata de endianness? –