在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 給函式傳陣列引數
在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...
C 給函式傳陣列引數
from 在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,...
c 中如何給函式傳遞陣列引數
在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...