我正在尝试编写一个简单的程序来展示如何在堆栈上间接操作变量。在下面的代码中,一切都按计划进行:即使传入了 a 的地址,我也可以间接更改 c 的值。但是,如果我删除最后一行代码(或最后三行中的任何一行),则不再适用。这些行是否以某种方式强制编译器将我的 3 in 变量顺序放入堆栈?我的期望是,情况总是如此。
#include <iostream>
using namespace std;
void someFunction(int* intPtr)
{
// write some code to break main's critical output
int* cptr = intPtr - 2;
*cptr = 0;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
someFunction(&a);
cout << a << endl;
cout << b << endl;
cout << "Critical value is (must be 3): " << c << endl;
cout << &a << endl;
cout << &b << endl;
cout << &c << endl; //when commented out, critical value is 3
}