真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言中數(shù)組作為函數(shù)形參,c語言數(shù)組做函數(shù)形參

C語言中數(shù)組作為函數(shù)參數(shù)

C中數(shù)組名代表該數(shù)組的首地址,

創(chuàng)新互聯(lián)公司主營納雍網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,納雍h5微信平臺小程序開發(fā)搭建,納雍網(wǎng)站營銷推廣歡迎納雍等地區(qū)企業(yè)咨詢

char

s[]="abc";

s代表的就是‘a(chǎn)’在內(nèi)存中的地址

以地址作參數(shù)

,實(shí)參和形參同時改變

C語言中如何將二維數(shù)組作為函數(shù)的參數(shù)傳遞

在C語言中可以用二維數(shù)組作為實(shí)參或者形參。

1、函數(shù)中用二維數(shù)組作為形參,函數(shù)聲明中可以指定所有維數(shù)的大小,也可以省略第1維的維數(shù)如:

void?f(int?array[3][10]);?//正確

void?f(int?array[][10]);??//正確

上面的兩種二維數(shù)組形參表示都是正確的。

2、函數(shù)中用二維數(shù)組作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:

void?f(int?array[][]);?//錯誤

因?yàn)閺膶?shí)參傳遞來的是數(shù)組的起始地址,在內(nèi)存中按數(shù)組排列規(guī)則存放(按行存放),而并不區(qū)分行和列,如果在形參中不說明列數(shù),則系統(tǒng)無法決定應(yīng)為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

void?f(int?array[3][]);??//錯誤

3、二維數(shù)組作為實(shí)參傳遞時,必須保證實(shí)參第2維的維數(shù)與形參第2維的維數(shù)相同,因?yàn)楸仨氁WC形參和實(shí)參的數(shù)據(jù)類型一致。比如定義如下函數(shù):

void?f(int?array[][10]);

可以將如下數(shù)組傳遞給函數(shù)f。

int?a[2][10]?=?{1,2,3,4};?

int?b[4][10]?=?{1};

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

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

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

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

#includestdio.h

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

//數(shù)組作為函數(shù)參數(shù),傳遞是整個數(shù)組的地址,修改了函數(shù)形參數(shù)組元素的值,會影響到外面的實(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ù)組作為形參實(shí)參的一些疑惑?

void fun(int arr[], int n);

在函數(shù)定義的時候,形參int arr[]不是表示某個元素的值,而是告訴編譯器第一個參數(shù)是一個數(shù)組指針,可以接收實(shí)參傳過來的數(shù)組地址。

實(shí)際上以上定義等價于下面的定義。

1.數(shù)組里面帶元素個數(shù):

void fun(int arr[常數(shù)], int n);

這里的常數(shù)可以是任意正整數(shù),實(shí)際上編譯器是會忽略,因?yàn)檫@里只要告訴編譯器我接收的是一個數(shù)組指針,至于它有多少個元素不關(guān)心,因?yàn)閷?shí)參也只是傳個地址過來。元素個數(shù)由參數(shù)二控制。至于為什么要這么約定可以看下面補(bǔ)充說明。

2.void fun(int *arr, int n);

使用指針,這種方式和題目中的方式是最常用的方式,第一種最不常用。

補(bǔ)充說明(為什么數(shù)組作為函數(shù)參數(shù)是傳地址,而不是傳每個元素):

設(shè)想一下,有一個函數(shù)如下

int fun(int nums[1000], int size)

它的參數(shù)一要處理1000多個元素的數(shù)組,如果是傳值即每個元素,那在函數(shù)體內(nèi)是不是就得再申請1000多個整數(shù)的內(nèi)存,還需要把值從實(shí)參那里復(fù)制過來,這是非常耗時間的而且沒有必要,因?yàn)樵趦?nèi)存的某個塊已經(jīng)存放了這些數(shù)據(jù)。只要告訴放在哪個位置,你函數(shù)體去那里找就行了。這里說的就是傳地址了,只需要傳個數(shù)組首地址,然后告訴有多少個元素要處理就OK了。傳地址只需要復(fù)制地址給形參,相對傳每個元素快得多。

C語言中用數(shù)組做為形參為什么形參改變時實(shí)參也要變??

c語言中數(shù)組名作為實(shí)參傳給被調(diào)用的函數(shù)時,形參獲得的是數(shù)組的起始地址。

還是用例子說話吧。

#include

int

*arry(int

*a)

{

int

*b;

b

=

a;

int

i;

for(i=0;i5;i++)

{

printf("%d",a[i]);

}

return

b;

}

int

main()

{

int

a[5]

=

{1,2,3,4,5};

int

*c;

int

i;

c

=

arry(a);

for(i=0;i5;i++)

{

printf("%d",c[i]);

}

}

主要是通過指針把數(shù)組,例如main里面的a的地址傳入arry函數(shù),然后在arry函數(shù)中用一個兼容類型的指針接收地址,然后就可以再這個指針下的地址操作地址上面的數(shù)據(jù)了。

arry返回的時候也是返回一個指針(地址)。


網(wǎng)頁名稱:c語言中數(shù)組作為函數(shù)形參,c語言數(shù)組做函數(shù)形參
鏈接分享:http://weahome.cn/article/hciisd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部