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

2021-09-30 11:41:26 字數 534 閱讀 5302

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

傳陣列給乙個函式,陣列型別自動轉換為指標型別,因而傳的實際是位址。

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)

陣列作為形參退化為指標

include void sizeof int arr int main void printf 傳入sizeof 函式進行計算 n sizeof arr printf 為傳入sizeof 函式直接在主函式中進行計算 n printf d n sizeof arr 在 中可以看到,主函式與sizeo...

C C 中陣列作為函式形參後退化為指標

最近寫了乙個函式,把陣列作為了它的引數,在這個函式中用到了這個陣列的長度,按照正常的求長度的方式,應該不會出錯 但是執行之後發現結果卻不是我想要的。於是寫了乙個測試程式來驗證我的猜想,驗證陣列做函式形參是否會退化為指標。include using namespace std void sort in...

陣列名作為函式引數時,退化為指標

陣列名作為函式引數時,退化為指標 func char str 100 函式中陣列名作為函式形參時,在函式體內,陣列名失去了本身的內涵,僅僅只是乙個指標 在失去其內涵的同時,它還失去了其常量特性,可以作自增 自減等操作,可以被修改。陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首位址 在c...