函數(shù)傳遞方式主要包括三種:按值傳遞篱竭、指針傳遞辆影、引用傳遞圃泡;下面給出具體函數(shù)書寫形式镊逝。
按值傳遞:
#include <iostream>
using namespace std;
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a=50,b=10;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
輸出為:a=50,b=10;
說明:按值傳遞的只是系統(tǒng)變量中的副本,并不會改變變量的值旺拉。
指針傳遞:
#include <iostream>
using namespace std;
void swap(int* x,int* y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
int main()
{
int a=50,b=10;
swap(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
輸出:a=10;b=50;
說明:指針傳遞产上,傳遞的是地址,交換時會改變原始值蛾狗。
引用傳遞:
#include <iostream>
using namespace std;
void swap(int& x,int& y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a=50,b=10;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
輸出:a=10;b=50;
說明:引用傳遞晋涣,傳遞的是變量的別名。
指針和引用的區(qū)別:
1 初始化的要求不同沉桌。引用在創(chuàng)建的同時必須初始化谢鹊。而指針在創(chuàng)建的時候沒必要初始化,可以在定義后面的任何地方重新賦值留凭。
2 可修改行不同佃扼。引用一旦被初始化為一個具體的對象,就不能作為另外一個對象的引用蔼夜。指針在任何時候都可以指向另外一個對象兼耀。
3 不存在NULL引用。引用必須指向具體的對象求冷。而指針可以為NULL瘤运,指針可以指向任意的對象。
4 測試需要的區(qū)別匠题。引用不會指向空值拯坟,因此不需要測試,而指針存在指向空值韭山,所以指針需要測試似谁。
5 應(yīng)用的區(qū)別傲绣。如果是指一旦指向一個對象就不會改變,使用引用巩踏。如果秃诵,存在指向NULL或者在不同的時刻需要指向不同的對象,使用指針塞琼。
6 傳引用比傳指針安全菠净。由于引用一旦被初始化指向一個對象,就不可能成為另外一個對象的引用彪杉,不存在空引用毅往。所以引用比較安全。指針存在NULL派近,可以隨時指向任何對象攀唯。即使是const指針也存在空指針,并有可能產(chǎn)生野指針渴丸。
7?除了可以改變有關(guān)變量的值侯嘀,“引用傳遞”方式的另一個好處是它的開銷相對要小一些:因為不需要在函數(shù)里創(chuàng)建臨時變量來容納那些值,程序的內(nèi)存占用量當然會小一些谱轨。
8?如果想獲得“引用傳遞”方式帶來的性能改善戒幔,但不想改變某個變量的值,可以把相應(yīng)的輸入?yún)?shù)定義為一個常量:
?void?swap(const?int?&x,const?int?&y);
內(nèi)容說明:
上述內(nèi)容僅個人的點滴粗見土童,如有不當之處诗茎,請同行批評指正。