从指针转换为整数。究竟发生了什么?以下是我认为可能发生的一些方式:
我要问的原因是因为从32位更改为64位指针不能再强制转换为整数。这是因为指针占用的内存大小为64位,即8个字节。
指针可能指向一个整数或一个整数,因为我们不知道指针指向的值大小。
是指针地址不能存储在整数中还是它包含的值不能存储在整数中?
说这个简单的代码。这不适用于64位。即使将指针视为整数,也无法强制转换。这让我相信它不是取值而是取指针的地址并将其插入整数。
在32位中,整数取指针地址并知道它有 从该指针地址取4个字节以获得完整值。
该陈述是否正确?
int main(void){
int number = 3;
int * pnumber = &number;
int castNumber = (int)pnumber;
}
我看了一下这个问题,但仍然没有理解真正发生在幕后的事情。 http://c-faq.com/ptrs/int2ptr.html
答案 0 :(得分:-1)
Casting实际上是对conpiler说的,看看这里的价值并将其视为另一种类型''。在指针的情况下,由指针保存的地址现在变为整数。是的,在64位模式下,您不能将sn地址存储为整数,而是存储为long int
。
示例:
int k=3;
int *pInt = &k;
long int castPtr = (long int)pInt;
int *another_pInt = (int*)castPtr; // *another_pInt is now 3
修改强>
首选unsigned long
超过long int
。你可能不应该关心价值的标志,因为它是一个地址。
答案 1 :(得分:-2)
这让我相信它没有取值而是取指针的地址并将其插入整数。
当然,它没有取指针指向的值。
要获取指针指向的值,您需要执行*pnumber
(取消引用)。仅使用pnumber
,您将获得指针指向的地址。
当您将指针地址存储在整数数据类型中时,结果将取决于案例。
1)如果整数数据类型和地址长度不同,那么当将其存储在整数数据类型的变量中时,地址的额外字节将会丢失。
2)如果大小相同,您可以将地址存储为整数数据类型。但是,我不能想到你需要的情况。
另一点是,如果整数数据类型的大小和地址相同,您可以安全地转换为int
并返回address
。阅读本文See this。