在C中,我们可以放置“&”在变量之前找出该变量的地址。 我有一台32位机器。每当我在控制台中打印地址时,控制台都会显示一个7位数的基数10。我只是想知道这个数字(10 ^ 7)与32位机器有什么关系。 (2 ^ 32)谢谢
答案 0 :(得分:13)
您应该将其打印为指针或十六进制值:
printf ("address = %p\n", &variable);
printf ("address = %x\n", &variable);
这将为您提供最多8位的十六进制数(对于您的32位地址空间)。
32位数字的范围从00000000
16 到FFFFFFFF
16 (0
到4,294,967,295
in十进制)所以它最多可以是十进制数。
你只得到一个7位数的10位数的原因是因为你的变量远不在地址空间的顶部。
答案 1 :(得分:2)
最大32位数,十六进制为0xFFFFFFFF,转换为4294967296(基数为10),因此您需要10位十进制数来显示最大32位数。较低的数字将使用较少的数字(0x1仅需要1)。
答案 2 :(得分:2)
内存中的变量与其所处的存储类型(即堆栈与静态数据)有关,以及可执行文件如何将这些段映射到内存中。
尝试静态分配一个包含2500万个整数的数组,并获取最后一个数据的地址。打赌你看到一个数字可能接近100,000,000。 (尽管如此,除非你想看看当你的系统用完ram时会发生什么,否则不要太过于沉寂=)
你可以做到
printf("0x%08x", &whatever)
..获取完整的8个十六进制数字,左边填充零填充。
'0x'部分并不是绝对必要的,但是如果/三,之后,你再次运行程序并且你碰巧看到的十六进制数没有AF字符,它有助于避免混淆它