在C中,当我转换为指向uintptr_t的指针时,它会截断部分地址。无论如何将整个地址存储为整数或其他不大于8字节的数据类型?
答案 0 :(得分:2)
我不确定你在那里面对的是什么,因为通常应该足够大以容纳任何指针;如果类型存在,它必须足够大以容纳
uintpt_t
因此任何指向任何对象的指针(C11草案n1570 7.20.1.4):
以下类型指定无符号整数类型,其属性是指向void的任何有效指针 可以转换为这种类型,然后转换回指针 无效, 并且结果将与原始指针进行比较:
void *
[此类型是可选的]
值得注意的是,无法保证指向函数的指针可以转换为uintptr_t
并且可以再次移回,但在POSIX上就是这种情况。
此外,C标准保证根本没有任何整数类型,足以在实现上包含指针;但是,如果类型uintptr_t
存在,那么情况并非如此(uintptr_t
类型是足够大的类型。)