如果我们取消引用整数指针,比如*(int *)
我们知道整数指针在64平台中占主导地位8字节。但整数在64平台上仍需要4个字节。
如果我想取消引用其内存开头包含另一个指针地址的指针,该怎么办?所以实际上我想取前8个字节的值。将取消引用*(int *)得到4字节或8字节?我认为它应该是4字节,因为整数是4字节。但是如何才能在64位平台上获得8字节?不知道平台是32位还是64位。
答案 0 :(得分:4)
让我们明确一些事情(这些都是平台独立的,但在大多数情况下),如果在你的系统上:
sizeof(int) is 4 bytes
sizeof(int*) is 4 on 32bit and 8 on 64bit
sizeof(int**) is 4 on 32bit and 8 on 64bit
当您取消引用int*
时,您正在提取int
。原始int*
在64位上可能是8个字节,但您将从32位或64位系统获得4个字节。
当您取消引用int**
时,您正在提取int*
。原始int**
可以是32位上的4个字节或64位上的8个字节,但是您将从32位系统获得4个字节,从64位系统获得8个字节,因为您正在提取int*
。
答案 1 :(得分:0)
我不确定我是否理解你的问题,但实际上我认为你根本没有问题,因为编译器会自动处理字大小,生成正确的代码对于每个平台。因此,让我们假设您调用一个函数,该函数返回指向int的指针:
int** ppiValue = SomeFunction ();
如果取消引用此指针,则会得到一个指向int的指针,该指针在每个平台上都具有适当的大小:
int* piValue = *ppiValue;
这将是64位处理器上的8个字节,或32位处理器上的4个字节。编译器负责为所选目标平台选择正确的大小。现在让我们取消引用这个指针:
int iValue = *piValue;
这将是两个处理器上的4字节值。再一次,编译器负责生成正确的机器代码指令。
所以不要打扰 - 只要您依赖强类型并且不使用危险的类型转换,编译器就会处理低级别的间接细节。