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