Разыменование этого указателя дает мне -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, как указаноВот.

Ответы на вопрос(4)

Ваш ответ на вопрос