Considere el siguiente código C
int main() { int a = 300; char *b = (char *)&a; *++b = 2; printf("%d ",a); return 0; }
Considere el tamaño de int como dos bytes y el tamaño de char como un byte. Prediga la salida del siguiente código.
Suponga que la máquina es little-endian.
(A) 556
(B) 300
(C) Error de tiempo de ejecución
(D) Error de tiempo de compilación
Respuesta: (A)
Explicación: El equivalente binario de 300 es 00000001 00101100. Como la máquina es little endian, 00000001 00101100 se almacena como 00101100 00000001 en la memoria en forma de array.
Entonces, al apuntador b se le da la dirección de a. Significa que la dirección del primer byte de 00101100 00000001 se asigna a b (por lo tanto, b se asigna 00101100).
*++b = 2 incrementa el valor de b en 1 para que b ahora apunte a la siguiente dirección de memoria que es 00000001 y el equivalente binario de 2 (00000010) se almacenará aquí.
Finalmente, a se convierte en 00101100 00000010, que en decimal es básicamente 556.
Por favor, lea el siguiente enlace:
http://stackoverflow.com/questions/22030657/little-endian-vs-big-endian
Prueba de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA