在Linux-64(x86_64)上,整数值16被截断为0

时间:2012-10-23 05:04:26

标签: c x86-64

我在某些(并非所有)64位linux上遇到了一个奇怪的问题, 其中 int value 16 被截断为

  • 是截断是因为将int转换为void *并再次返回int(理解这不是一个好习惯)

    • 16变为hex-10和http://qb64.net/wiki/index.php?title=%26B
    • 虽然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;
    }

1 个答案:

答案 0 :(得分:0)

为了演示OP的注释中引用的文档中描述的问题,请使用以下代码:

      ptr = &i;
      printf("\n%d", (int)ptr))

要查看地址已更改,请添加以下行:

      printf("\n%p", &i))

并且看到打印的两个值不同。

所有这一切都假设sizeof(void*)大于sizeof(int)