我曾经认为cout语句指向相同的值,即使一个以十六进制打印,其他以整数格式打印.但今天我在g ++上运行相同的内容,发现第二个语句崩溃了.
int i1=12;
int *p1=&i1;
cout<<*(*((int***)&p1)); cout<<"\n\n "; //is same
cout<<*(int*)*(int*)&p1; cout<<"\n "; //is same
Run Code Online (Sandbox Code Playgroud)
为什么有效地将第二个语句与打印值相同时会崩溃i1.
你不能只是假装指针和整数是这样的.您的代码对类型宽度和对齐做了大量假设,使用错误的类型别名化,然后解除引用.所有这些都有未定义的行为.如果它在你"幸运"之前"有效".
只需扔掉它,根据C++语言的语义编写一些有意义的东西.