Это программа, в которой я запускал:
#include <stdio.h>
int main()
{
int y = 1234;
char *p = &y;
int *j = &y;
printf("%d " , *p);
printf("%d" , *j);
}
Я немного смущен о выходе. Я вижу:
-46 1234
Я написал эту программу в качестве эксперимента и не был уверен, что она собирается выводить. Я ожидал, возможно, один байт от y
.
Что здесь происходит "за кадром"? Как разыменование p
дает мне -46?
Обновление
Как указано на другом, мне пришлось делать явное кастинг, чтобы не вызывать UB. Я не меняю эту строку на char *p = &y to char *p = (char *)&y
, чтобы я не признал недействительным ниже ответов.