指向自己的指针C.

pre*_*e13 6 c pointers

我正在写一个在递归链末尾调用的函数.这个函数需要弄清楚它在被调用的时候在内存中的位置.代码如下:

void recover ()
{
     int * x = (int *)&x;
}
Run Code Online (Sandbox Code Playgroud)

问题是程序只是跳过这个语句,好像它从未写过.我在GDP中证实了这一点.你能想出为什么这条线被忽略的原因吗?

谢谢!

nnn*_*nnn 9

将变量声明为volatile.它应该阻止编译器优化.

volatile int * x = (int *)&x;
Run Code Online (Sandbox Code Playgroud)


ysa*_*sap 6

如果您正在编译并打开优化,那么由于对程序没有影响,此代码可能已经过优化.使用-O0选项.