C++ pass函數,不傳參數,如何修改變量的值

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章