日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 数组传递与值传递讲解

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 数组传递与值传递讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在普通變量或下標變量作函數參數時,形參變量和實參變量是由編譯系統分配的兩個不同的內存單元。在函數調用時發生的值傳送是把實參變量的值賦予形參變量。在用數組名作函數參數時,不是進行值的傳送,即不是把實參數組的每一個元素的值都賦予形參數組的各個元素。因為實際上形參數組并不存在,編譯系統不為形參數組分配內存。那么,數據的傳送是如何實現的呢?在我們曾介紹過,數組名就是數組的首地址。因此在數組名作函數參數時所進行的傳送只是地址的傳送,也就是說把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之后,也就等于有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。因此當形參數組發生變化時,實參數組也隨之變化。


上圖說明了這種情形。圖中設a為實參數組,類型為整型。a占有以2000為首地址的一塊內存區。b為形參數組名。當發生函數調用時,進行地址傳送,把實參數組a的首地址傳送給形參數組名b,于是b也取得該地址2000。于是a,b兩數組共同占有以2000為首地址的一段連續內存單元。從圖中還可以看出a和b下標相同的元素實際上也占相同的兩個內存單元(整型數組每個元素占二字節)。例如a[0]和b[0]都占用2000和2001單元,當然a[0]等于b[0]。類推則有a[i]等于b[i]。
多維數組也可以作為函數的參數。在函數定義時對形參數組可以指定每一維的長度,也可省去第一維的長度。因此,以下寫法都是合法的:
int MA(int a[3][10]);或int MA(int a[][10]);

下面給出兩個將數組傳遞進函數的例子:
ex1:

//求5名學生的平均成績 #include <stdio.h>float aver(float a[5]) //此處函數的定義中數組的元素個數可以省略,由傳入的數組決定 {int i;float av,s=a[0];for(i=1;i<5;i++)s=s+a[i];av=s/5;return av; }int main(void){float sco[5],av;int i;printf("\ninput 5 scores:\n");for(i=0;i<5;i++)scanf("%f",&sco[i]);av=aver(sco); //此處將數組傳遞進函數時使用的是數組名稱,沒有括號printf("average score is %5.2f",av);return 0; }

ex2:

//將數組中小于0的元素置成0 #include <stdio.h> void nzp(int a[8]) {int i;printf("\nvalues of array are:\n");for(i=0;i<8;i++){if(a[i]<0)a[i]=0;printf("%d ",a[i]);} }int main(void) {int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i<5;i++)scanf("%d",&b[i]);printf("initial values of array b are:\n");for(i=0;i<5;i++)printf("%d ",b[i]);nzp(b); //將有5個元素的數組傳遞進一個有8個元素的數組的函數,編譯通過printf("\nlast values of array b are:\n");for(i=0;i<5;i++)printf("%d ",b[i]);return 0; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的C语言 数组传递与值传递讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。