0

在 C 语言中,我们可以在变量前放置“&”来计算该变量的地址。我有一台 32 位机器。每当我在控制台中打印地址时,控制台都会显示一个以 10 为基数的 7 位数字。我只想知道这个数字(10^7)与 32 位机器有什么关系。(2^32) 谢谢

4

3 回答 3

13

您可能应该将其打印为指针或十六进制值:

printf ("address = %p\n", &variable);
printf ("address = %x\n", &variable);

这将为您提供最多 8 位的十六进制数(对于您的 32 位地址空间)。

32 位数字的范围从0000000016FFFFFFFF16(十进制04,294,967,295),因此它最多可以是 10 位十进制数字。

你只得到一个 7 位以 10 为基数的数字的原因是因为你的变量离地址空间的顶部很远。

于 2009-09-24T01:59:03.403 回答
2

最大 32 位数字,十六进制的 0xFFFFFFFF,转换为 4294967296(以 10 为基数),因此您需要 10 个十进制数字来显示最大 32 位数字。较低的数字将使用较少的数字(0x1 只需要 1)。

于 2009-09-24T02:01:39.047 回答
2

变量在内存中的位置与它的存储类型(即堆栈与静态数据)以及可执行文件如何将这些段映射到内存有关。

尝试静态分配一个包含 2500 万个整数的数组,并获取最后一个整数的地址。打赌你会看到一个数字可能接近 100,000,000。(不过,不要太着迷,除非你想看看当你的系统用完内存时会发生什么=)

你可以做

printf("0x%08x", &whatever)

.. 获得完整的 8 个十六进制数字,并在左侧填充零。

'0x' 部分不是绝对必要的,但如果/当三周后再次运行程序并且您碰巧正在查看的十六进制数字中没有 AF 字符时,它有助于避免混淆。

于 2009-09-24T02:16:23.377 回答