C++函數參數傳遞三種方式


       當進行函數調用的時候,要填入與函數形式參數個數相同的實際參數,在程序運行的過程當中,實參會將參數值傳遞給形參,C++函數參數傳遞有如下三種方式。node


一. 值傳遞ios

1. 利用值傳遞方式,其實是把實參的內容複製到形參中,實參和形參是存放在兩個不一樣的內存空間中。在函數體內對形參的一切修改對實參都沒有影響函數

2. 若是形參是類的對象,利用值傳遞的話每次都要調用類的構造函數構造對象,效率比較低spa

3. 看下面這個例子指針

#include<iostream>
#include<algorithm>
using namespace std;

class Node{
public:
	Node(){}
private:
	int value;
};

//形參是內置數據類型
void Fun(int a){
	cout<<"形參a的地址 = "<<&a<<endl;
}

//形參是類的對象
void Fun(Node node){
	cout<<"形參node的地址 = "<<&node<<endl;
}

int main(){
	//內置數據類型
	int a = 10;
	cout<<"實參a的地址 = "<<&a<<endl;
	Fun(a);
	//數據類型是類
	Node node;
	cout<<"實參node的地址 = "<<&node<<endl;
	Fun(node);

	return 0;
}

輸出結果以下


說明形參和實參確實是存放在兩個不一樣的內存單元中code


二. 指針傳遞(地址傳遞)對象

1. 當進行指針傳遞的時候,形參是指針變量,實參是一個變量的地址或者是指針變量,調用函數的時候,形參指向實參的地址。內存

2. 指針傳遞中,函數體內能夠經過形參指針改變實參地址空間的內容。get

3. 看下面例子it

//指針傳遞
void swap(int *a, int *b){
	cout<<"形參指針a的地址 = "<<a<<endl;
	cout<<"形參指針b的地址 = "<<b<<endl;
    int tmp = *a;
	*a = *b;
	*b = tmp;
}

int main(){
	int a = 5;
	int b = 10;
	cout<<"實參變量a的地址 = "<<&a<<endl;
	cout<<"實參變量b的地址 = "<<&b<<endl;
	cout<<"實參變量a的值 = "<<a<<endl;
	cout<<"實參變量b的值 = "<<b<<endl;
	//調用函數,指針傳遞方式
	swap(&a, &b);
	cout<<"實參變量a的值 = "<<a<<endl;
	cout<<"實參變量b的值 = "<<b<<endl;
	getchar();
	return 0;
}

輸出結果


說明指針傳遞的過程當中, 確實是把實參的地址傳遞給形參,經過形參指針確實能夠更改實參指向的內存空間的值。


三. 傳遞引用

1. 引用其實是某一個變量的別名,和這個變量具備相同的內存空間。 

2. 實參把變量傳遞給形參引用,至關於形參是實參變量的別名,對形參的修改都是直接修改實參。

3. 在類的成員函數中常常用到類的引用對象做爲形參,大大的提升代碼的效率

4. 看如下例子

//引用傳遞
void Fun(int &a){
	cout<<"形參引用a的地址 = "<<&a<<endl;
	a = 100; //對形參引用進行修改
}

int main(){
	int a = 10;
	cout<<"實參a的地址 = "<<&a<<endl;
	cout<<"實參a的值 = "<<a<<endl;
	Fun(a);
	cout<<"實參a的值 = "<<a<<endl;
	getchar();
	return 0;
}

輸出結果


說明,形參引用的修改會直接修改實參變量的值。建議採用傳遞引用的方式

相關文章
相關標籤/搜索