1. 程式人生 > >c 陣列做為形參時 該引數退化為指標

c 陣列做為形參時 該引數退化為指標

當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。

傳陣列給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
所以以上三種函式宣告完全等同。


實際情況是,陣列做引數,完全無法按值傳遞。這是由C/C++函式的實現機制決定的。

通常計算陣列大小的方式如下:

int len = sizeof(arr)/sizeof(type)

利用總長度和單個元素的長度關係得到陣列的長度

但做為形參後,sizeof(arr)的長度總為4,即一個指標的長度。

為此,有兩種方法來解決這個問題:

方法1.

引數傳遞的時候,直接加上一個引數做為陣列的長度

方法2.(是錯誤的)

int *p = a[0];
int iLen = 0;
while(p != NULL)
{
    iLen++;
    *p++;
}