什麼時候用指標形參?什麼時候用引用形參?
阿新 • • 發佈:2018-12-30
0.在作為引數的作用中指標和引用的共同特點是都可以在函式中改變實參物件,標準 C 中是沒有引用形參的,只能使用指標形參。
1.就函式引數傳遞數值而言,傳遞指標與傳遞引用唯一的優勢是避免拷貝,同時帶來實參被改變的風險,但是可以通過const來儘量避免。
2.就為改變實參這個目的而言,指標對於引用的優勢在於當你有可能需要傳入一個空的概念*(尚未創立的物件,空指標可以表示,而引用無法表示空的概念)的時候,指標還有一個優勢是引用不利於理解程式碼。
比如問題:
(如void xchange1(int *n1,int *n2
))或引用形參(如void xchange2(int &n1,int &n2)
在呼叫fun的地方,開發者馬上能警覺pi所指內容可能在fun中改變,而看不出對ri的影響。有人可能會說使用const, 那也是在定義的地方,在呼叫的地方看不見,讀程式碼的人總得多看一層。
3.就為改變實參這個目的而言,引用對於指標在於其存在是為了降低指標靈活性帶來的風險,指標形參不僅可以將資料的引用傳入函式,還可以在函式內改變這個指標,也就是說在函式內部可以改變呼叫域的變數(而不僅僅是物件)
4.相比起引用,指標有這些特點:
指標變數可以被重複賦值或更改(引用則不行,一經賦值不能再改)
指標變數可以為空(引用必須指向具體物件)
#include <iostream>
#include <cstdlib>
using namespace std;
void xchange1(int *n1,int *n2);
void xchange2(int &n1,int &n2);
int main(void)
{
int num1 = 9,num2 = 0;
cout<<num1<<' '<<num2<<endl;
xchange1(&num1,&num2);
cout<<num1<<' '<<num2<<endl;
xchange2(num1,num2);
cout <<num1<<' '<<num2<<endl;
system("pause");
return 0;
}
void xchange1(int *n1,int *n2)
{
auto temp = *n1;
*n1 = *n2;
*n2 =temp;
}
void xchange2(int &n1,int &n2)
{
auto temp = n1;
n1 = n2;
n2 = temp;
}