怎样在pass()函数中不传参数,添加代码,让main()函数中第二次打印的a变成333...
先来看代码:
void pass(){ int b=333; int *p=&b; while(*p!=222){ p++; cout<<"address: "<<p<<endl; } *p=333; return; } int main(){ int a=222; cout<<a<<endl; cout<<"address: "<<&a<<endl; pass(); cout<<a<<endl; cout<<"address: "<<&a<<endl; system("pause"); return 0; }
再来看一下运行的结果:
分析一下过程:
(1)为什么可以这样修改?
因为所有的局部变量,均是在栈上申请空间,而pass函数又在main函数之中进行调用,那么实际上,公用一个栈上进行变量的操作。
(2)如何进行修改呢?
在pass中重新申请一个变量,之后申请一个指针进行地址相连,之后遍历到a变量的地址上,此后通过指针来进行值的修改。
(3)为什么跑出来的结果,地址是这样的趋势呢?
由于栈空间的生长方向,是从高地址到低地址进行生长,而p++的含义,指的是不断的取向下一个位置,因此,是从高地址往低地址进行搜寻(我的系统是64位,因此两两之间的地址差值为4*8=32)