C++中的值传递、指针传递、引用传递
生活随笔
收集整理的這篇文章主要介紹了
C++中的值传递、指针传递、引用传递
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Language: C++
數值傳遞
- 值傳遞
- 指針傳遞
- 引用傳遞
定義
值傳遞
形參是實參的拷貝,改變形參的值并不會影響外部實參的值。從被調用函數的角度來說,值傳遞是單向的(實參->形參),參數的值只能傳入,
不能傳出。當函數內部需要修改參數,并且不希望這個改變影響調用者時,采用值傳遞。
指針傳遞
形參為指向實參地址的指針,當對形參的指向操作時,就相當于對實參本身進行的操作。
指針傳遞參數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,即在棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。(這里是在說實參指針本身的地址值不會變)
引用傳遞
形參相當于是實參的“別名”,對形參的操作其實就是對實參的操作。在引用傳遞過程中,被調函數的形式參數雖然也作為局部變量在棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調函數中的實參變量。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。
實例
using namespace std; //值傳遞void change1(int n){cout<<"值傳遞--函數操作地址"<<&n<<endl; //顯示的是拷貝的地址而不是源地址 n++; }//引用傳遞 void change2(int & n){cout<<"引用傳遞--函數操作地址"<<&n<<endl; n++; }//指針傳遞 void change3(int *n){cout<<"指針傳遞--函數操作地址 "<<n<<endl; *n=*n+1;} int main(){int n=10;cout<<"實參的地址"<<&n<<endl;change1(n);cout<<"after change1() n="<<n<<endl;change2(n);cout<<"after change2() n="<<n<<endl;change3(&n);cout<<"after change3() n="<<n<<endl;return true; } 復制代碼運行結果:
實參的地址0x7ffee9a7a9b8 值傳遞--函數操作地址0x7ffee9a7a96c after change1() n=10 引用傳遞--函數操作地址0x7ffee9a7a9b8 after change2() n=11 指針傳遞--函數操作地址 0x7ffee9a7a9b8 after change3() n=12 復制代碼Reference
- C++ 值傳遞、指針傳遞、引用傳遞詳解
總結
以上是生活随笔為你收集整理的C++中的值传递、指针传递、引用传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是缓存击穿?
- 下一篇: swoole学习(一)----linux