C語言陣列作為形參傳遞,關於sizeof的乙個錯誤

2022-06-29 17:15:09 字數 381 閱讀 2479

今天覆習排序演算法時用c語言實現,出現乙個問題。

void insertsort(int a)

a[j+1] = cur;

} return ;

}

排序結果只有前兩個數字正確,後面的沒有改變。原因是:sizeof(a)/sizeof(int)在函式內使用錯誤。

a是函式引數,到了本函式中,a只是乙個指標(位址,系統在本函式執行時,是不知道a所表示的位址有多大的資料儲存空間,這裡只是告訴函式:乙個資料空間首位址),所以,sizoef(a)的結果是指標變數a佔記憶體的大小,一般在64位機上是8個位元組。所以這裡sizeof(a)/sizeof(int)的值永遠是2。

解決辦法是,在函式外部計算出陣列a的長度n,再傳入函式內使用。

C 陣列作為形參傳遞給函式

以下三種形式等價 void function const int arg void function const int arg void function const int arg 10 這裡維度表示期望有10個,並不代表真實為10個以上三個函式等價於將陣列的頭指標const int 型別傳遞給...

C 中函式作為形參傳遞

規定 沒有括號的函式名被認為是乙個指向該函式的函式指標 如 void add 這裡的add就是指向該函式的指標 語法 函式返回值的型別 作為指標的函式名 該函式的引數 如 void visit int a,int b 如果有個函式swep要呼叫某個函式,那麼 swep void visit int ...

陣列作為形參

在函式傳遞值的過程中,一般都是值傳遞但是陣列確實傳遞的指標,這樣主要用於避免過多資料複製占用過多的記憶體空間。我們在設定函式的時候可以使用 int puta const int geta,int s a 來避免原始陣列受到修改,如此的話修改會報錯 input.cpp in function int ...