今天覆習排序演算法時用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 ...