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

2021-09-27 02:25:33 字數 1355 閱讀 3134

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

#include using namespace std;

void sort(int nsortarray[6])}}

}int main()

; cout << "排序前......" << endl;

for (int i = 0; i < sizeof(narray) / sizeof(narray[0]); i++)

cout << endl;

sort(narray);

cout << "排序後......" << endl;

for (int i = 0; i < sizeof(narray) / sizeof(narray[0]); i++)

system("pause");

return 0;

}

上述**是為乙個陣列排序,列印結果發現,前後的結果並沒有什麼改變,斷點除錯發現它的長度只是1;如下所示:

也就是說sizeof(nsortarray)的長度和sizeof(nsortarray[0])的長度是等價的,而sizeof(nsortarray[0])是陣列的首位址的長度,即它相當於乙個指標,指向陣列首值的位置;那麼結果自然而然出來了,nsortarray作為形參後,就只是當做乙個指標來使用了,它指向陣列的首位置。所以正確的寫法應該如下所示:

#include using namespace std;

void sort(int nsortarray, int nlen)}}

}int main()

; cout << "排序前......" << endl;

for (int i = 0; i < sizeof(narray) / sizeof(narray[0]); i++)

cout << endl;

sort(narray, sizeof(narray)/sizeof(narray[0]));

cout << "排序後......" << endl;

for (int i = 0; i < sizeof(narray) / sizeof(narray[0]); i++)

system("pause");

return 0;

}

從上面**也可以看出,陣列除了作為形參退化為指標,其他情況下都是能夠正常求取陣列的長度的。

陣列作為形參退化為指標

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

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

當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。傳陣列給乙個函式,陣列型別自動轉換為指標型別,因而傳的實際是位址。void func int array 10 void func int array void func int array 所以以上三種函式宣告完全等同。實...

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

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