PUERTA | Maqueta de puerta 2017 | Pregunta 44

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *