类型转换指向int崩溃的指针

anu*_*g86 -3 c++

我曾经认为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.

Lig*_*ica 6

你不能只是假装指针和整数是这样的.您的代码对类型宽度和对齐做了大量假设,使用错误的类型别名化,然后解除引用.所有这些都有未定义的行为.如果它在你"幸运"之前"有效".

只需扔掉它,根据C++语言的语义编写一些有意义的东西.