我在某些(并非所有)64位linux上遇到了一个奇怪的问题, 其中 int value 16 被截断为零。
是截断是因为将int转换为void *并再次返回int(理解这不是一个好习惯)
虽然void *在64位操作系统上是8字节,但它只能估计LSB?这是原因吗? 如果是这样的话,为什么这一直不容易重现?
或者这是由于大端?
示例源代码如下
样本来源
int main() {
int i = 0;
void *ptr = NULL;
printf("\nsizeof - void(*) : %d , int : %d", sizeof(void*), sizeof(int));
for(i = 0; i < 20; i++) {
ptr = &i;
printf("\n%d", *((int*)ptr));
}
return 0;
}
答案 0 :(得分:0)
为了演示OP的注释中引用的文档中描述的问题,请使用以下代码:
ptr = &i;
printf("\n%d", (int)ptr))
要查看地址已更改,请添加以下行:
printf("\n%p", &i))
并且看到打印的两个值不同。
所有这一切都假设sizeof(void*)
大于sizeof(int)
。