c語言函數(shù)中數(shù)組參數(shù)傳遞 c語言調(diào)用函數(shù)數(shù)組做傳遞參數(shù)

c語言怎么將數(shù)組作為函數(shù)參數(shù)傳入?

一維數(shù)組的元素作為函數(shù)實(shí)參,與同類型的簡(jiǎn)單變量作為實(shí)參一樣,是單向的值傳遞,即數(shù)組元素的值傳給形參,從而形參是改變不影響實(shí)參

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的新巴爾虎左網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

數(shù)組名代表著整個(gè)數(shù)組的地址,如果一維數(shù)組的名字作為函數(shù)實(shí)參,傳遞的是整個(gè)數(shù)組,即形參數(shù)組和實(shí)參數(shù)組完全相同,是存放在同一存儲(chǔ)空間的同一個(gè)數(shù)組。這樣形參數(shù)組

修改時(shí),實(shí)參數(shù)組也同時(shí)被修改了。形參數(shù)組的元素個(gè)數(shù)可以省略。

#includestdio.h

//數(shù)組作為函數(shù)參數(shù),可以省略元素個(gè)數(shù)

//數(shù)組作為函數(shù)參數(shù),傳遞是整個(gè)數(shù)組的地址,修改了函數(shù)形參數(shù)組元素的值,會(huì)影響到外面的實(shí)參數(shù)組

void change(int array[])

{

printf("array ==%p\n",array);

array[0] = 100;

}

int main()

{

int ages[6] = {10,11,13,15,11,18};

printf("array ==%p\n",ages);

change(ages);

printf("%d\n",ages[0]);

return 0;

}

輸出結(jié)果為: array ==0x7fff5be26c00

array ==0x7fff5be26c00

100

C語言數(shù)組當(dāng)參數(shù)傳遞

在學(xué)習(xí)C語言的過程中遇到數(shù)組作為參數(shù)傳遞的問題

一維數(shù)組:

這樣我們可以很順利的在test去遍歷這個(gè)數(shù)組a,當(dāng)然我們還可能傳遞指針:

一般來數(shù)參數(shù)的傳遞是值傳遞,也就是說實(shí)參傳給形參,形參發(fā)生改變時(shí)實(shí)參并不會(huì)改變,(單向)但是數(shù)組在傳遞的時(shí)候是地址傳遞,只要形參發(fā)生了變化,實(shí)參也會(huì)發(fā)生變化(雙向)。

這樣傳遞數(shù)組就會(huì)發(fā)現(xiàn)一個(gè)問題,我沒有辦法獲取到數(shù)組的長度。獲取數(shù)組的長度我們一般用:

我們會(huì)發(fā)現(xiàn)n的值一直是2!為什么會(huì)這樣呢!?

因?yàn)椋琣是函數(shù)參數(shù),到了本函數(shù)中,a只是一個(gè)指針(地址,系統(tǒng)在本函數(shù)運(yùn)行時(shí),是不知道a所表示的地址有多大的數(shù)據(jù)存儲(chǔ)空間,這里只是告訴函數(shù):一個(gè)數(shù)據(jù)空間首地址),所以,sizoef(a)的結(jié)果是指針變量a占內(nèi)存的大小,一般在64位機(jī)上是8個(gè)字節(jié)。int類型是4個(gè)字節(jié),所以,結(jié)果永遠(yuǎn)是2,因此,我們要向獲取數(shù)組長度要怎么辦呢?

我可以在初始化數(shù)組的地方獲取到數(shù)組的長度,作為參數(shù)傳遞過來:

這樣做我們可以獲取到數(shù)組的長度。

二維數(shù)組:

二維數(shù)組作為參數(shù)傳遞是后我們不可以像以為數(shù)組那樣直接,如:

會(huì)發(fā)現(xiàn)編譯都編譯不通過,報(bào)“[Error] declaration of 'a' as multidimensional array must have bounds for all dimensions except the first”這個(gè)錯(cuò),意思是多維數(shù)組的定義必須有一個(gè)除第一個(gè)之外的所有維度的邊界,比如:

這樣就OK了,但是我們是動(dòng)態(tài)分配的數(shù)組不知道這個(gè)維度是多少的時(shí)候怎么辦?這時(shí)候我們可以用指針當(dāng)做一維數(shù)組來操作:

這樣我們發(fā)現(xiàn)不能更靈活的去定位到某一行某一列,這樣我們需要手工改變尋址方式:

C語言中,數(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)行操作,何苦鉆牛角尖。

網(wǎng)站欄目:c語言函數(shù)中數(shù)組參數(shù)傳遞 c語言調(diào)用函數(shù)數(shù)組做傳遞參數(shù)
文章路徑:http://muchs.cn/article16/hgeodg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站策劃網(wǎng)站建設(shè)、建站公司、服務(wù)器托管、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營