【发布时间】:2015-01-04 11:46:19
【问题描述】:
// intialize a char variable, print its address and the next address
char charvar = '\0';
printf("address of charvar = %p\n", (void *)(&charvar));
printf("address of charvar - 1 = %p\n", (void *)(&charvar - 1));
printf("address of charvar + 1 = %p\n", (void *)(&charvar + 1));
// intialize an int variable, print its address and the next address
int intvar = 1;
printf("address of intvar = %p\n", (void *)(&intvar));
printf("address of intvar - 1 = %p\n", (void *)(&intvar - 1));
printf("address of intvar + 1 = %p\n", (void *)(&intvar + 1));
这是我在网上找到的代码,这是相关的输出
address of charvar = 0x7fff9575c05f
address of charvar - 1 = 0x7fff9575c05e
address of charvar + 1 = 0x7fff9575c060
address of intvar = 0x7fff9575c058
address of intvar - 1 = 0x7fff9575c054
address of intvar + 1 = 0x7fff9575c05c
我的疑问是为什么计算机中的内存地址是以十六进制格式存储的?我们知道一个 char 的大小是 8bits 或 1 byte,1 byte 在内存中是什么意思,即 charvar 的起始位的地址是 0x7fff9575c05f char+1 的地址不应该是 0x7fff9575c05f + 8bits 是 0x7fff9575c067,但似乎计算机中的一个内存位置是按 8 位或 1 字节组织的。我说的对吗?如果是,为什么?
【问题讨论】:
-
"为什么计算机中的内存地址是以十六进制格式存储的?" 您正在使用 @ 以十六进制表示法打印它987654323@ 格式说明符 - 仅此而已。值如何存储是完全不同的事情。
-
那么 0x7fff9575c05f 指的是什么?
-
地址,以十六进制形式打印。
-
为什么这个问题被评为-1?
标签: c