轉自:https://www.cnblogs.com/tanjuntao/p/8678927.html
還是看原文的格式更舒服些
一、值傳遞
這種傳遞方式中,實參和形參是兩個不同的地址空間,參數傳遞的實質是將原函數中變量的值,複製到被調用函數形參所在的存儲空間中,這個形參的地址空間在函數執行完畢後,會被回收掉。整個被調用函數對形參的操作,隻影響形參對應的地址空間,不影響原來函數中的變量的值,因爲這兩個不是同一個存儲空間。
二、引用傳遞
這種傳遞方式中,形參是引用類型變量,其實是實參的一個別名,在被調用函數中,對引用變量的所有操作等價於對實參的操作。整個被調用函數對形參的操作執行完畢後,原先的實參的值也會發生改變。
三、指針傳遞
這種傳遞方式中,實參是變量的地址{swap(&a,&b);},形參是指針類型的變量。在函數中對指針變量的操作,就是對實參(變量地址)所對應的變量的操作。整個被調用函數對形參的操作執行完畢後,原函數中的變量的值將會發生改變。
代碼如下:
-
#include<iostream>
-
using namespace std;
-
//值傳遞 交換前a=1,b=2;交換後a=1,b=2;
-
void swap(int a,int b){
-
int temp=a;
-
a=b;
-
b=temp;
-
}
-
//引用傳遞 交換前a=1,b=2;交換後a=2,b=1;
-
void swap(int &a,int &b){
-
int temp=a;
-
a=b;
-
b=temp;
-
}
-
//指針傳遞 交換前a=1,b=2;交換後a=2,b=1;
-
void swap1(int *a,int *b){
-
int temp=*a;
-
*a=*b;
-
*b=temp;
-
}
-
//主函數
-
int main(){
-
int a=1;
-
int b=2;
-
cout<<"交換前"<<endl;
-
cout<<"a="<<a<<endl;
-
cout<<"b="<<b<<endl;
-
swap(a,b);//值傳遞和引用傳遞
-
swap1(&a,&b);//指針傳遞
-
cout<<"交換後"<<endl;
-
cout<<"a="<<a<<endl;
-
cout<<"b="<<b<<endl;
-
return 0;
-
}