怎样在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)