- 相關(guān)推薦
C語(yǔ)言中函數(shù)之間地址傳遞方式
導(dǎo)語(yǔ):C語(yǔ)言中函數(shù)之間的數(shù)據(jù)傳遞方式有值傳遞、引用傳遞、地址傳遞。下面就由小編為大家介紹一下C語(yǔ)言中函數(shù)之間地址傳遞方式,歡迎大家閱讀!
1 函數(shù)之間數(shù)據(jù)傳遞方式分類
C語(yǔ)言程序是由函數(shù)組成的。設(shè)計(jì)C語(yǔ)言程序時(shí),通常將一個(gè)大的程序按功能分成若干個(gè)較小的模塊,每個(gè)模塊編寫成結(jié)構(gòu)清晰、接口簡(jiǎn)單、容易理解的程序段,即函數(shù)。這種方法可建立公用模塊,消除重復(fù)工作,提高程序開發(fā)效率。[1]從函數(shù)的形式來(lái)看,函數(shù)可分為無(wú)參函數(shù)和有參函數(shù)。在調(diào)用有參函數(shù)時(shí),主調(diào)函數(shù)與被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞,也就是說(shuō),主調(diào)函數(shù)可以將數(shù)據(jù)傳遞給被調(diào)函數(shù)使用,被調(diào)函數(shù)中的數(shù)據(jù)也可以帶回來(lái)給主調(diào)函數(shù)使用。
值傳遞:數(shù)據(jù)只能從實(shí)參單向傳遞給形參,稱為“按值”傳遞。當(dāng)基本類型變量作為實(shí)參時(shí),在函數(shù)調(diào)用過(guò)程中,形參和實(shí)參占據(jù)不同的存儲(chǔ)空間,形參的改變對(duì)實(shí)參的值不產(chǎn)生任何影響
引用傳遞:使實(shí)參和形參共用一個(gè)地址,即所謂“引用傳遞”。這種傳遞方式,無(wú)論對(duì)哪個(gè)變量進(jìn)行修改,都是對(duì)同一地址內(nèi)存空間的內(nèi)容進(jìn)行修改,其實(shí)參變量與它的引用即形參變量,總是具有相同的值。例如程序:
2 函數(shù)之間的地址傳遞
2.1 形參為指針變量時(shí)函數(shù)之間的數(shù)據(jù)傳遞。如果函數(shù)的形參為指針類型時(shí),對(duì)應(yīng)的實(shí)參類型必須與形參的基類型相同。
例如程序:調(diào)用swap函數(shù),用指針傳遞的方式交換主函數(shù)中變量x和y中的數(shù)據(jù)。
函數(shù)之間值的傳遞是單向傳遞,也就是說(shuō)函數(shù)只能通過(guò)實(shí)參把值傳遞給形參,若形參值改變,對(duì)實(shí)參不會(huì)產(chǎn)生影響;把數(shù)據(jù)從被調(diào)函數(shù)返回到主調(diào)函數(shù)的唯一途徑就是通過(guò)return語(yǔ)句,且只能返回一個(gè)數(shù)據(jù)。若是采用以上通過(guò)傳遞地址值的方式,可以在被調(diào)用函數(shù)中對(duì)主調(diào)函數(shù)中的變量進(jìn)行引用,通過(guò)改變形參的值而讓實(shí)參的值得到相應(yīng)改變,這樣就可以實(shí)現(xiàn)把多個(gè)數(shù)據(jù)從被調(diào)用函數(shù)返回到主調(diào)用函數(shù)。
2.2 一維數(shù)組名作實(shí)參時(shí)函數(shù)之間的數(shù)據(jù)傳遞。函數(shù)之間在進(jìn)行數(shù)據(jù)傳遞時(shí),數(shù)組元素可以作為實(shí)參傳遞給形參,這時(shí)的數(shù)組元素與普通變量一樣,這種傳遞實(shí)際上就是值的傳遞。在C語(yǔ)言中,一維數(shù)組是由若干類型相同的數(shù)組元素組成的,因?yàn)閿?shù)組名本是一個(gè)地址值,通?梢园褦(shù)組名作為實(shí)參傳送,對(duì)應(yīng)的形參就用指針變量,其基類型與數(shù)組的類型要求一致。在函數(shù)間進(jìn)行數(shù)據(jù)傳遞時(shí),可以通過(guò)此指針變量來(lái)引用主調(diào)函數(shù)中對(duì)應(yīng)的數(shù)組元素,從而可以實(shí)現(xiàn)對(duì)主調(diào)函數(shù)中對(duì)應(yīng)的數(shù)組元素進(jìn)行數(shù)據(jù)處理。
當(dāng)數(shù)組名作為實(shí)參時(shí),函數(shù)調(diào)用arrin(a)對(duì)應(yīng)的形參除了指針外,對(duì)應(yīng)函數(shù)首部還可以寫成arrin(int pa[])和arrin(int pa[N])兩種形式。雖然說(shuō)明的形式與數(shù)組的說(shuō)明相同,但C編譯程序時(shí)都把pa處理成以上的指針形式。另外,上例中被調(diào)用函數(shù)除了通過(guò)指針引用數(shù)組元素*(pa+i)外,還可以寫成pa[i]的形式。
2.3 二維數(shù)組名作實(shí)參時(shí)函數(shù)之間的數(shù)據(jù)傳遞。當(dāng)二維數(shù)組名作為實(shí)參時(shí),被調(diào)函數(shù)的形參必須是一個(gè)行指針變量。例如,若主函數(shù)有以下二維數(shù)組定義:double a[M][N];則被調(diào)函數(shù)fun的首部可以是以下三種形式之一:(1)fun ( double (*pa)[N]);(2)fun (double pa[M][N]);(3)fun ( double pa[ ][N])。以上無(wú)論哪種形式,與一維數(shù)組數(shù)據(jù)傳遞一樣,系統(tǒng)都將把pa處理成一個(gè)指針,但是一個(gè)行指針。其處理方式一樣,系統(tǒng)只為形參開辟一個(gè)存放地址的存儲(chǔ)單元。
2.4 指針數(shù)組作實(shí)參時(shí)函數(shù)之間的數(shù)據(jù)傳遞。當(dāng)指針數(shù)組作為實(shí)參時(shí),對(duì)應(yīng)的形參應(yīng)當(dāng)是一個(gè)指向指針的指針。因?yàn)楹瘮?shù)傳遞的是一維數(shù)組指針數(shù)組名,所以參數(shù)的定義與2.2中的一維數(shù)組名作實(shí)參的形式類似。
3 結(jié)束語(yǔ)
引用傳遞雖然可以通過(guò)改變形參的值而影響實(shí)參,操作比較靈活,但進(jìn)行批量數(shù)據(jù)傳遞有明顯缺陷。對(duì)數(shù)組多個(gè)元素以及規(guī)模較大的結(jié)構(gòu)體數(shù)據(jù)進(jìn)行操作,只能選用地址傳遞的方式,這種傳遞方式只需在被調(diào)函數(shù)中開辟一個(gè)存放地址的4字節(jié)的存儲(chǔ)空間,不需要另外開辟形參的存儲(chǔ)空間,實(shí)際參數(shù)和形式參數(shù)對(duì)應(yīng)于相同的內(nèi)存單元,因此,對(duì)形式參數(shù)的操作也就是對(duì)實(shí)際參數(shù)的操作。這種傳遞方式效率高,應(yīng)用靈活,功能強(qiáng)大。
【C語(yǔ)言中函數(shù)之間地址傳遞方式】相關(guān)文章:
在C語(yǔ)言中函數(shù)調(diào)用方式的區(qū)別09-01
C語(yǔ)言中g(shù)ets()函數(shù)知識(shí)08-10
C語(yǔ)言中strpbr()函數(shù)的用法07-25
C語(yǔ)言中isalnum()函數(shù)和isalpha()函數(shù)的對(duì)比10-12
C語(yǔ)言中函數(shù)的區(qū)分有哪些10-25
C語(yǔ)言中strstr()函數(shù)的使用分析08-03