每个地址的存储大小是多少?

Emr*_*mre -1 c memory

我原以为每个内存地址都包含 1 字节数据。但在下面的代码中,我得到了 4 字节的十六进制值。为什么会发生这样的事?

我知道负面int 报道

char num = -25;
char *ptr = #
printf("%02X", *ptr);
Run Code Online (Sandbox Code Playgroud)

Output : FFFF FFE7

Expected : E7

编辑:这里的另一个很好的答案: https ://stackoverflow.com/a/8060195/17823490

P__*_*J__ 5

printf("%02X", *ptr);
Run Code Online (Sandbox Code Playgroud)

*ptr正在转换int并打印为int

您需要使用正确的 printf 格式:

printf("%02hhX", *ptr);
Run Code Online (Sandbox Code Playgroud)