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