陣列作為函式引數
陣列可以作為函式的引數使用,進行資料傳送。陣列作為函式引數有兩種形式。
(1)把元素作為實參使用。
(2)把陣列名作為函式的形參和實參使用。
1、陣列元素作為函式實參
陣列元素就是下標變數,它與普通變數並無區別。因此它作為函式實參使用與普通變數是完全相同的,在發生函式呼叫時,把作為實參的陣列元素的值傳遞給形參,實現單向的值傳遞。
例:判別一個整數陣列a[10]={1,2,3,4,-1,-2,-3,-4,2,3}中個元素的值,若大於0,則輸出該值,若小於等於0,則輸出0。
#include <stdafx.h> #include<stdio.h> void test(int v); void main() { int a[10]={1,2,3,4,-1,-2,-3,-4,2,3}; int i; for(i=0;i<=10;i++) { test(a[i]); } printf("\n"); } void test(int v) { if(v>0) { printf("%d\n",v); } else { printf("0\n"); } }
2、陣列名作為函式引數
注:(1)與陣列元素作為函式引數不同的是,用陣列名作為函式引數時,要求形參與相對應的實參都必須是型別相同的陣列,否則會發生錯誤。
(2)用陣列名作為函式引數時,並不是進行值的傳遞,即不是把實引數組的每一個元素的值都賦與形引數組的各個元素。因為實際上形引數組並不存在,編譯系統並不為形引數組分配記憶體。
資料的傳遞:陣列名就是陣列的首地址。因此在陣列名作為函式引數時所進行的傳遞只是地址的傳遞,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也等於有了實際的陣列,即實參與形參有一段共用的記憶體空間。
例:
#include <stdafx.h> #include<stdio.h> void test (int b[10]); void main() { int a[10]={2,4,6,8,10,12,14,16,18,20}; test(a); putchar('\n'); } void test (int b[10]) { int i=0; for(;i<10;i++) { printf("%6d",b[i]); } }
例:有一個一維陣列score,內放10個學生成績,求平均成績。(寫一個average函式獲取平均成績)。
#include <stdafx.h> #include<stdio.h> double average(double array[10]);/*函式宣告*/ void main() { double score[10]={82,100,55,80,64,78,26,65,36,85},result; result=average(score); printf("%lf\n",result); } double average(double array[10]) { int i; double f=0; for(i=0;i<=9;i++) { f+=array[i]; } f /= 10; return (f); }