1、新建一個(gè)數(shù)組作為參數(shù)項(xiàng)目,如圖所示:
成都創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都酒樓設(shè)計(jì)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
2、添加一個(gè)array.c文件,如圖所示:
3、包含stdio.h和stdlib.h頭文件,如圖所示:
4、輸入main函數(shù)主體及返回值,如圖所示:
5、定義一個(gè)數(shù)組arr,如圖所示:
6、定義一個(gè)function函數(shù),如圖所示:
7、將數(shù)組作為參數(shù)傳遞給function函數(shù),如圖所示:
8、運(yùn)行程序,輸出結(jié)果,如圖所示:
C中數(shù)組名代表該數(shù)組的首地址,
char
s[]="abc";
s代表的就是‘a(chǎn)’在內(nèi)存中的地址
以地址作參數(shù)
,實(shí)參和形參同時(shí)改變
要將數(shù)組長度作為一個(gè)參數(shù)傳給average函數(shù),不能在average函數(shù)內(nèi)部通過int arrLen = sizeof(a) / 4;來計(jì)算數(shù)組長度。因?yàn)閒loat average(float a[10])就相當(dāng)于float average(float *a) ,所以sizeof(a)恒等于4,sizeof(a) / 4恒等于1。
應(yīng)該這樣:
float average(float a[10],int arrLen) {
float sumSco = 0;
for (int i = 0; i arrLen; i++)
{
sumSco += a[i];
}
return sumSco / arrLen;
}
傳數(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ù)并對其進(jìn)行操作,何苦鉆牛角尖。
一維數(shù)組的元素作為函數(shù)實(shí)參,與同類型的簡單變量作為實(shí)參一樣,是單向的值傳遞,即數(shù)組元素的值傳給形參,從而形參是改變不影響實(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