将整数指针转换为整数

尝试下面的代码来检查当我们将整数指针转换为整数时会发生什么。

#include #include int main() { int *p; int a; p = (int *)malloc(sizeof(int)); *p = 10; a = (int)p; printf("%d\n",*p); printf("%d \n",a); return 0; } The output is : 10 135680008 

任何人都可以解释一下这个转换的概念吗? 提供与此主题相关的任何链接也会有所帮助。

显然,您将指针与指针的内容混淆。

作为对现实世界的类比,你可以说,当我指着一只鸟时,你想把我的食指转换成一只鸟。 但是“鸟”和“手指”之间没有关系。

将该类比转移到您的程序:您将指向您的int的对象转换为int本身。 由于C指针被实现为“存储器单元的数量”,并且由于存在大量可用的存储器单元,因此很明显(int)p将导致非常大的数量。

铸造是一件令人讨厌的事情。 指针非常类似于整数,这是巧合。 如果它们被实现为“ m 记忆库的 n 地址”,你就不会问这个问题,因为没有明显的关系,你就不可能做这个演员。

135680008p指向的十进制地址(hex为0x8165008 ):用malloc分配的内存区域的地址。

在这里,您打印出a的内存地址,但是您将其打印为带符号的十进制整数。 它作为一种格式没有多大意义,因为一些高内存地址,取决于你的字大小和编译器的确切边界将被打印为负数。

标准是将其打印为无符号hex,用零填充为8或16个字符(实际上,这取决于确切的字大小)。 在printf ,这将是%#08X ,因此内存地址0x243将打印为0x00000243。