C++知識點(11)_傳遞數組、指針和引用給函數

本章旨在幫助理解掌握值傳遞、指針傳遞、引用傳遞三種方式。

值傳遞:形參是實參的拷貝,改變形參的值不會影響外部實參的值,從被調用函數的角度來說,值傳遞是單向的,即從實參——>形參,參數的值只能傳入,不能傳出。當函數內部需要修改參數,並且不希望這個改變影響調用者,採用值傳遞。
指針傳遞:形參爲指向地址的指針,當對形參的指向操作時,就相當於對實參本身進行操作。
引用傳遞:形參相當於實參的別名。對形參的操作其實就是對實參的操作,在引用傳遞過程中,被調函數的形式參數雖然也作爲局部變量在棧中開闢了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。

#include<iostream>
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 0;
}

程序輸出:

實參的地址:0x7fff948c0404
值傳遞:0x7fff948c03dc
after change1() n=10
引用傳遞:0x7fff948c0404
after change2() n=11
指針傳遞:0x7fff948c0404
after change3() n=12

結論:
從上述實驗可以看出,實參的地址爲ox7fff948c0404
1)當採用值傳遞時,函數操作地址是ox7fff948c03dc,並不是實參本身,所以對它進行操作並不能改變實參的值。即是說,函數操作是建立了另外一個臨時空間。)
2)當採用引用傳遞時,操作地址就是實參地址,只是相當於實參的一個別名,對它的操作就是對實參的操作。
3)當採用指針傳遞時,操作地址也是實參地址。
問題:引用傳遞與指針傳遞的區別?
規則:
(1)引用被創建的同時初始化;指針在任何時候都可以被初始化。
(2)引用不能有NULL引用,引用必須與合法的存儲單元關聯;指針可以NULL
(3)一旦引用被初始化,就不能改變引用的關係;指針則可以隨時改變所指的對象。

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