**:
在c++中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小
例: void print_1 (int n, int *datas )
std::cout << std::endl;
}對這個函式,我們可以這樣使用它:
const int n = 3;
int datas[n] = ;
print_1 (n, datas);
不過對這個函式,我們可能會傳錯 n 的大小,而在執行時可能出錯,例如這樣使用:
const int n = 3;
int datas[n] = ;
print_1 (4 , datas);
有些時候,我們希望某函式只接受指定大小的陣列,例如我們希望只接受大小為 3 的陣列:
void print_2 (int datas[3] )
std::cout << std::endl;
}但實際上,上面的函式不能正確工作:
const int n = 3;
int datas[n] = ;
print_2 (datas);
int datas2[n - 1] = ;
print_2 (datas2);
也就是我們傳入了乙個大小為 2 的陣列,編譯器沒報任何錯誤,我們的函式介面 print_2 (int datas[3 ]) 中的 3 沒起任何作用
事實上,上面的函式介面應該這樣寫:
void print_3 (int (&datas) [3])
std::cout << std::endl;
}這時,我們如果這樣使用是正確的
const int n = 3;
int datas[n] = ;
print_3 (datas);
而我們如果這樣使用,編譯器會報錯
int datas2[n - 1] = ;
print_3 (datas2);
在上面這個例子(print_3)的基礎上,我們可以使用模板進行泛型實現
template
void print_4 (int (&datas)[n])
std::cout << std::endl;
}這時候,我們可以傳遞任意大小陣列,而不擔心給函式傳入了錯誤的引數
const int n = 3;
int datas[n] = ;
print_4 (datas);
int datas2[n - 1] = ;
print_4 (datas2);
假如我們給傳了錯誤引數,函式將會報錯
const int n = 3;
int datas[n] = ;
print_4<4 > (datas);
C 中陣列引數傳遞
include 傳遞陣列引數的幾種方式 void printvalues const int a 10 void printvalues2 int a 10 控制邊界 方法1 void printvalues4 int start,int end void printvalues5 const in...
C 中傳遞陣列引數
將陣列作為引數進行傳遞有兩種傳遞方法,一種是 function int a 另一種是 function int a 這兩種兩種方法在函式中對陣列引數的修改都會影響到實參本身的值!對於第一種,根據之前所學,形參是實參的乙份拷貝,是區域性變數。但是陣列是個例外,因為陣列的資料太多了,將其一一賦值既麻煩又...
如何給OPENQUERY傳遞引數
發現sql server裡,直接呼叫鏈結伺服器的函式是不可以的。create function func test userid int returns table asreturn select from 192.168.0.252 user dbo.func getdata userid go ...