uintptr_t太小,无法存储地址

时间:2016-05-14 05:57:42

标签: c

在C中,当我转换为指向uintptr_t的指针时,它会截断部分地址。无论如何将整个地址存储为整数或其他不大于8字节的数据类型?

1 个答案:

答案 0 :(得分:2)

我不确定你在那里面对的是什么,因为通常应该足够大以容纳任何指针;如果类型存在,它必须足够大以容纳uintpt_t因此任何指向任何对象的指针(C11草案n1570 7.20.1.4):

  

以下类型指定无符号整数类型,其属性是指向void的任何有效指针   可以转换为这种类型,然后转换回指针   无效,   并且结果将与原始指针进行比较:

     

void *

     

[此类型是可选的]

值得注意的是,无法保证指向函数的指针可以转换为uintptr_t并且可以再次移回,但在POSIX上就是这种情况。

此外,C标准保证根本没有任何整数类型,足以在实现上包含指针;但是,如果类型uintptr_t存在,那么情况并非如此(uintptr_t类型是足够大的类型。)