因?yàn)槟愕淖雍瘮?shù)參數(shù)里有指針變量,是可以改變實(shí)參的
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
數(shù)組其實(shí)和指針變量的意思差不多,可以照著地址傳進(jìn)指針變量的參數(shù)
C語言在形參和實(shí)參之間傳遞的不僅是值傳遞,也包括地址傳遞的。
細(xì)節(jié)如下:
C語言函數(shù)參數(shù)傳遞包括按值傳遞和按地址傳遞兩種;
當(dāng)形式參數(shù)是數(shù)組、指針時(shí)都是使用的按地址傳遞。
傳數(shù)組給一個(gè)函數(shù),數(shù)組類型自動(dòng)轉(zhuǎn)換為指針類型,因而傳的實(shí)際是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
所以以上三種函數(shù)聲明完全等同。
實(shí)際情況是,數(shù)組做參數(shù),完全無法按值傳遞。這是由C/C++函數(shù)的實(shí)現(xiàn)機(jī)制決定的。
下一個(gè)問題是:為什么偏要按值傳遞呢?當(dāng)要在一個(gè)函數(shù)內(nèi)使用一個(gè)數(shù)組時(shí),傳一個(gè)指針進(jìn)去不就行了?只要能訪問到我們所要的數(shù)據(jù)并對(duì)其進(jìn)行操作,何苦鉆牛角尖。
C語言中,舉個(gè)例子swap(int a,int b)函數(shù)。你的main()函數(shù)中調(diào)用swap(x,y)。是把x,y的值傳過去,傳給a,b后。x,y和a,b的聯(lián)系就斷了。所以叫做單向傳遞。
C++有一種方式叫做引用,例如:int i=x; 可以理解為i是x的別名,地址還是相同的。這時(shí)候在swap()函數(shù)中,x,y是真正地參與到運(yùn)算中去。并把結(jié)果返回調(diào)用函數(shù)。所以這個(gè)叫做雙向傳遞。
這是我的理解,如果不對(duì),請(qǐng)見諒。
分兩種情況給你對(duì)比一下
函數(shù)形參用普通變量,當(dāng)函數(shù)被調(diào)用的時(shí)候,實(shí)參的值被賦值給了形參,函數(shù)被調(diào)用的時(shí)候開辟了內(nèi)存空間給形參,也就是數(shù)據(jù)被復(fù)制了,然后函數(shù)開始處理形參的數(shù)據(jù),這個(gè)時(shí)候和實(shí)參的數(shù)據(jù)是沒有任何關(guān)系了。當(dāng)函數(shù)結(jié)束的時(shí)候形參的內(nèi)存空間是要被釋放,或者說刪除的,所以對(duì)實(shí)參啥也沒干,只是拿了實(shí)參的數(shù)據(jù)復(fù)制了一份,然后對(duì)復(fù)制的那一份算的很起勁,結(jié)果最后刪除了,啥也沒干。
函數(shù)形參用指針,當(dāng)函數(shù)被調(diào)用的時(shí)候,實(shí)參指針,也就是把地址復(fù)制了一份給形參,但是函數(shù)中我們用取內(nèi)容符號(hào)'*'對(duì)形參指針?biāo)傅膬?nèi)容,同時(shí)也是實(shí)參指針?biāo)傅耐环輧?nèi)容進(jìn)行處理,函數(shù)結(jié)束的時(shí)候形參指針的值是被釋放了,可是形參指針,同時(shí)也是實(shí)參指針?biāo)傅膬?nèi)容還在。
感覺講的蠻清楚了,不懂再追問。
值傳遞。
實(shí)參與形參數(shù)據(jù)傳遞有兩種方式:值傳遞與地址傳遞。
地址傳遞的形式為
int
a=b;
也就是我們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。
有些人有誤解:認(rèn)為c語言的int
*p=a;不也是按地址傳遞嗎?其實(shí)不是這樣的。
深入理解值傳遞與地址傳遞就會(huì)發(fā)現(xiàn):
值傳遞是:把實(shí)參的值傳給一個(gè)變量(形參)。所以int
*p=a也是把a(bǔ)的地址值傳給了指針變量p
地址傳遞是:直接把地址傳進(jìn)來,沒有賦給任何變量,這樣在函數(shù)體內(nèi)對(duì)形參的操作也就是對(duì)實(shí)參地操作。有這種功能的也就是引用()了。