Anular la referencia a este puntero me da -46, pero no estoy seguro de por qué
Este es un programa que ejecuté:
#include <stdio.h>
int main(void)
{
int y = 1234;
char *p = &y;
int *j = &y;
printf("%d %d\n", *p, *j);
}
Estoy un poco confundido acerca de la salida. Lo que estoy viendo es:
-46 1234
Escribí este programa como un experimento y no estaba seguro de lo que iba a generar. Esperaba posiblemente un byte dey
.
¿Qué está pasando "detrás de escena" aquí? ¿Cómo funciona la desreferenciación?p
Dame-46
?
Como señalaron otros, tuve que hacer un casting explícito para no causar UB. No estoy cambiando esa línea dechar *p = &y;
achar *p = (char *)&y;
para no invalidar las respuestas a continuación.
Este programa no está causando ningún comportamiento de UB como se indicaaquí.