0

我在某些(不是全部)64 位 linux 上遇到了一个奇怪的问题,其中int 值 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;
    }
4

1 回答 1

0

为了演示 OP 的评论 mod 中引用的文档中描述的问题,您的代码如下:

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

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

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

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

所有这些都假定sizeof(void*)为更大sizeof(int)

于 2012-10-23T17:35:55.897 回答