1. 程式人生 > >C++函式引數傳遞的3種方式以及優缺點(轉)

C++函式引數傳遞的3種方式以及優缺點(轉)

寫函式時遇到給予函式的引數變數無法被修改的問題,轉自:https://blog.csdn.net/zhaoxun91/article/details/75417492

1 函式引數傳遞的3種方式比較
1.1 按值傳遞

#include <iostream>
using namespace std;
void swap(int,int);
int main()
{
int a=10,b=20;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}

//按值傳遞的只是系統變數中的副本,並不會改變變數的值。
//程式執行結果為a=10,b=20;
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
}


1.2 指標傳遞

#include <iostream>
using namespace std;
void swap(int*,int*);
int main()
{
int a=10,b=20;
swap(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}

//指標傳遞,傳遞的是地址
//a=20;b=10;

void swap(int* x,int* y)
{
int t;
t=*x;
*x=*y;
*y=t;
}


1.3 引用傳遞

#include <iostream>
using namespace std;
void swap(int&,int&);
int main()
{
int a=10,b=20;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}

//引用傳遞,傳遞的是變數的別名
//a=20;b=10;

void swap(int& x,int& y)
{
int t;
t=x;
x=y;
y=t;
}


2 指標和引用的區別
2.1 初始化要求不同。引用在建立的同時必須初始化。而指標在建立的時候沒必要初始化,可以在定義後面的任何地方重新賦值。
2.2 可修改行不同。引用一旦被初始化為一個具體的物件,就不能作為另外一個物件的引用。指標在任何時候都可以指向另外一個物件。
2.3 不存在NULL引用。引用必須指向具體的物件。而指標可以為NULL,指標可以指向任意的物件。
2.4 測試需要的區別。引用不會指向空值,因此不需要測試,而指標存在指向空值,所以指標需要測試。
2.5 應用的區別。如果是指一旦指向一個物件就不會改變,使用引用。如果,存在指向NULL或者在不同的時刻需要指向不同的物件,使用指標。
3 傳引用比傳指標安全
3.1 由於引用一旦被初始化指向一個物件,就不可能成為另外一個物件的引用,不存在空引用。所以引用比較安全。
3.2 指標存在NULL,可以隨時指向任何物件。即使是const指標也存在空指標,並有可能產生野指標。
--------------------- 
作者:zhaoxun91 
來源:CSDN 
原文:https://blog.csdn.net/zhaoxun91/article/details/75417492