哪位大哥能帮我解释下下面的代码:
         int a = 5;
int *p = &a;
cout<<p<<endl;
cout<<(long)p<<endl;
long x = (long)p;
cout<<(int*)x<<endl;
运行结果:
0012FF7C
1245052
0012FF7C我的理解:
int a = 5;
int *p = &a;  //之后p的内存中存的是a的地址,也就是0012FF7C
cout<<p<<endl;//打出p的内容,也就是a的地址0012FF7C
cout<<(long)p<<endl; //把32位指针的内容转化为long数据类型
long x = (long)p;//保存转化后的结果
cout<<(int*)x<<endl;//把long转化为32为指针的形式,这时候它存的就是a的地址,如果*(int*)x的话就是5各位,我只能这么理解,不知道对不对,不对的话请指出来,谢谢了!
如果真的像我说的那样,那么什么时候这种转化时不安全的,是不是说只要强制转化的数据类型比指针的类型大就是安全的,更进一步说就是只要不发生切割(sild什么的)就是安全的,可以随意转换对不对?