指针只是一个整数?

Min*_* Fu 3 c c++ pointers integer

如果我知道数据对象的地址,我可以将地址存储为整数并将整数作为指针操作吗?

例如,

void main(){
    long a = 101010;
    long *p = &a;
    long b = p;
    printf("%lld\n", *(long*)b);
}
Run Code Online (Sandbox Code Playgroud)

总是安全吗?

评论:long b = p;产生警告:

Initialization makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

但是,该程序打印101010.

Yu *_*Hao 7

标准并不能保证这样的演员总能奏效.

要将指针存储在整数类型中,请使用intptr_t(或其未签名的表兄弟uintptr_t).保证将void *指针转换为此类型并转换回来,从而产生相同的值.

请注意,这些类型是可选的.