數組名作函數的參數,必須遵循以下原則:
(1)如果形參是數組形式,則實參必須是實際的數組名,如果實參是數組名,則形參可以是同樣維數的數組名或指針。
(2)要在主調函數和被調函數中分別定義數組。
(3)實參數組和形參數組必須類型相同,形參數組可以不指明長度。
(4)在C語言中,數組名除作為變量的標識符之外,數組名還代表了該數組在內存中的起始地址,因此,當數組名作函數參數時,實參與形參之間不是"值傳遞",而是"地址傳遞",實參數組名將該數組的起始地址傳遞給形參數組,兩個數組共享一段內存單元,編譯系統不再為形參數組分配存儲單元。
例9-15:分析程序的執行過程。
#include <stdio.h>
func6 ( char str[ ] )
{ printf ("%s",str);
}
main( )
{ char a[10]= "Turbo C";
func6(a); /* 數組名做函數的實參 */
}
內存空間存儲狀態如9-5圖所示。
![]() |
調用時,實參數組將首地址a 賦值給形參數組str,兩個數組共同占用相同的內存單元,共享數組中的數據,a[0]與str[0]代表同一個元素,a[1]與str[1]代表同一個元素。因此,當數組名做函數參數時,形參數組的長度與實參數組的長度可以不相同,當形參數組長度小與實參數組長度時,形參數組只取部分實參數組中的數據,實參中的其余部分可以不起作用,形參數組也可以不指明長度。
多維數組做函數的參數
當多維數組中元素做函數參數時,與一維數組元素做函數實參是相同的,這里討論多維數組名做函數的參數。以二維數組為例:
二維數組名做函數參數時,形參的語法形式是:
類型說明符 形參名[ ][常量表達式M]
形參數組可以省略一維的長度。
例如:int array[ ][10]
由於實參代表了數組名,是"地址傳遞",二維數組在內存中是按行優先存儲,並不真正區分行與列,在形參中,就必須指明列的個數,才能保證實參數組與形參數組中的數據一一對應,因此,形參數組中第二維的長度是不能省略的。
調用函數時,與形參數組相對應的實參數組必須也是一個二維數組,而且它的第二維的長度與形參數組的第二維的長度必須相等。