引用和指針做形參是很常見的問題,但是它們在做參數的時候是有區別的。先說一下指針吧,指針他是一個變量,有具體的值,他的值是一個地址(非const)。
而引用是對一個變量的引用,是變量的別名,並且在引用的時候必須要初始化。舉個例子吧:
int a=2;
int &b=a; // b是對a的引用,a、b是同一個內存單元,即a和b的值都是2,b就相當於是a的一個別名,改變b的值a也會發生改變,改變a的值b也會發生改變,例如
b=10; 當系統執行了這條語句后,a和b的值就都變成了10;
a=-5; 當系統執行了這條語句后,a和b的值就都變成-5。 因為a和b具有同一個內存空間,所以不管改變哪一個的值,另一個也會跟着發生改變,可以理解為一個
人他可以有兩個名字,他既可以叫 張三,也能叫李四,但不管是哪個名字,其實說的是一個人。然后說一下引用和指針做形參時的具體用法吧,舉下面這個例子:
void swap(int &pa,int *pb)
{
}
int main()
{
int a,*b;
swap(a,b)
}
在主函數中調用swap()時,指針和引用做形參就是上面的形式。當用指針或者引用做形參來改變主函數中變量的值得時候,指針是值傳遞,傳遞的是指針變量b的值;而
引用是址傳遞,傳遞的是變量a的地址。另外還有一點要知道,指針做形參,傳遞指針的時候,會產生一個臨時的指針變量,需要分配額外的內存空間;但是傳引用的話
則不會,所以傳引用效率更高,也比指針更安全。