特定元素個數的陣列作為函式入參的兩個方法

2022-02-08 01:43:20 字數 539 閱讀 8673

陣列作為入參時,自動被轉換為指標。因此陣列定義的元素個數的引數無法帶入函式。這不符合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 型別傳遞給...