32位地址位置混乱......(C编程)
-
16-09-2019 - |
题
在C,我们可以将“&”的变量之前找出该变量的地址。 我有一个32位的机器。每当我在控制台打印地址,控制台显示一个7位十进制数。我只是想知道怎么就这么数(10 ^ 7)相关的32位机。 (2 ^ 32)由于
解决方案
您可能应该将其打印出来,可以是指针或十六进制值:
printf ("address = %p\n", &variable);
printf ("address = %x\n", &variable);
这会给你的最多8位十六进制数(您的32位地址空间)。
一个32位数字的范围从00000000
<子> 16 子>通过FFFFFFFF
<子> 16 子>(通过在十进制0
4,294,967,295
),所以它可以是最多10个十进制数字。
你只得到一个7位基10号的原因是因为你的变量是隔靴搔痒的地址空间的顶部。
其他提示
其中在存储器中的变量的土地具有与其在什么样的存储的(即,栈VS静态数据),以及如何将可执行已映射那些段到内存中执行。
尝试静态分配2500万个整数数组,并采取最后一个地址..敢打赌,你看到一个数字,也许更接近起来亿。 (不要在这方面太忘乎所以不过,除非你想看看会发生什么,当你的系统运行了公羊=)
您可以做
printf("0x%08x", &whatever)
..得到充分的8个十六进制数字用零填充在左边填充。
在“0X”部分不是绝对必要的,但它有助于避免混淆,如果/当,三个星期后,再次运行该程序,你碰巧在看不具有AF字符十六进制数它
最大的32位数字,为0xFFFFFFFF以十六进制,转换为4294967296(底为10),所以你需要10个十进制数字来显示最大的32位数字。较低的数字将使用更少的位数(为0x1只需要1)。
不隶属于 StackOverflow