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.
标准并不能保证这样的演员总能奏效.
要将指针存储在整数类型中,请使用intptr_t(或其未签名的表兄弟uintptr_t).保证将void *指针转换为此类型并转换回来,从而产生相同的值.
请注意,这些类型是可选的.