先舉個簡單例子:
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站服務(wù),網(wǎng)站設(shè)計,網(wǎng)站托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)。
#include iostream
using namespace std;
void Add1(int *a)
{
(*a)++;
}
void Add2(int a)
{
a++;
}
int main()
{
int x=1,y=5;
Add1(x);
Add2(y);
coutx" "yendl;
return 0;
}
輸出:
2 5
這兩個自加函數(shù)中,Add1是指針傳遞,Add2是數(shù)值傳遞,
在調(diào)用Add2(y)時,系統(tǒng)是先建造一個int型變量a,再將y的值傳給a(此時y和a是兩個不同地址的變量,只是兩者值相同),然后a++,卻對y沒有任何操作,故在函數(shù)調(diào)用結(jié)束后,釋放a,而y沒任何變化;
在調(diào)用Add1(x)時,系統(tǒng)先建造int型指針a,然后將實參x的地址傳給了指針a,故此時a與x是指向同一地址,即共享統(tǒng)一數(shù)據(jù),當對地址a內(nèi)的數(shù)據(jù)進行操作,就是對x進行操作。a++時自然也對x++,當函數(shù)調(diào)用結(jié)束,指針a釋放掉,x的值此時已經(jīng)發(fā)生了變化。
這就是兩者不同,地址傳遞的參數(shù)都是指針類型,于數(shù)值傳遞不一樣。
至于選擇那種傳遞,就要看這個程序的具體目的和功能了,一般要對參數(shù)進行修改的要用地址傳遞,而只是調(diào)用參數(shù)的數(shù)據(jù)進行其他計算并不需要修改數(shù)據(jù)本身宜用數(shù)值傳遞。
還有什么不明白嗎
分兩種,一種是按值傳遞,一種是按地址傳遞,
按值傳遞就是在子函數(shù)中開辟出一個臨時內(nèi)存空間,將傳遞的數(shù)值保存在這個空間中,當子函數(shù)結(jié)束后,這個內(nèi)存空間就會釋放了!
按地址傳遞則是把主函數(shù)開辟的某個內(nèi)存空間首地址傳遞給子函數(shù),子函數(shù)可以直接讀寫主函數(shù)上這段內(nèi)存空間,當子函數(shù)結(jié)束后,這部分空間不會被釋放,主函數(shù)將繼續(xù)使用這段空間!
當傳遞的數(shù),不止一個的時候,或者要改變參數(shù)值得時候返回實參的值得時候。就用傳遞地址。
例如:
getct(int
*a,int
*b)
{
printf("%d
%d",*a,*b);
}
mian()
{
int
x=5,y=3;
int
*s,*z;
s=x;z=y;
getct(s,z);
}