陣列作為入參時,自動被轉換為指標。因此陣列定義的元素個數的引數無法帶入函式。這不符合coder的預期,也是不嚴格和有風險的coding。
如何解決呢,一種辦法是再加乙個引數,指定元素個數
void test(int* a, int n)
}另外一種辦法是傳遞陣列的引用,本文的重點。
void test(int (&a)[3])
}這樣寫陣列a就不會被轉換為指標了,而且有了元素個數的資訊,呼叫的時候,也必須傳遞乙個含有3個元素的陣列
int a[3] = ;
test(a) ; // ok
int b[1] = ;
test(b) ; // error, can not convert parameter a from int[1] to int(&)[3]
作為入參的出參指標
若實為入參,則是傳入資料,此時一般為char 即傳入讀取資料的位址 若實為出參 1維指標,若已經為該位址申請記憶體或該指標指向一塊可改寫的記憶體區域,則一般為char 傳入欲寫入資料的位址 2維指標,若沒有為該位址申請記憶體,欲讓被呼叫函式在內部進行記憶體申請而在外部記憶體釋放,則必須傳入指標的位址...
Matlab 函式作為陣列元素 報錯 陣列維度不一
本人正在基於matlab學習非線性規劃,在程式設計時碰到了乙個非常詭異的錯誤,經過不斷debug才得以解決。具體情況是這樣的 我需要把非線性規劃的兩個限制條件寫入乙個陣列,但是debug的時候它死活報錯 陣列維度不統一 可是之前本人在練習線性規劃的時候,也把若干個限制條件寫入了乙個陣列,那個時候是正...
C 陣列作為形參傳遞給函式
以下三種形式等價 void function const int arg void function const int arg void function const int arg 10 這裡維度表示期望有10個,並不代表真實為10個以上三個函式等價於將陣列的頭指標const int 型別傳遞給...