陣列指標和陣列引用做引數的區別(是否能夠限定陣列大小、陣列降價) template
void func1(t &, t &)
template
void func2(tt, tt)
int main()
1 .在c++中可以定義陣列的引用,用以解決c中無法解決的「陣列降價」問題,我們先來看看什麼是「陣列降價」,先看如下**:
void test( char array[20] )
char array[20] = ;
cout << sizeof(array) << endl; // 輸出 20test( array );
我們看到,對於同樣的陣列array,乙個輸出4,另乙個輸出20.這是因為void test( char array[20] ) 中的array被降階處理了,void test( char array[20] ) 等同於 void test( char array ) 也等同於void test( char* const array ) 如果你原意,它甚至等同於void test( char array[999] )
也就是說
void test( char array[20] )
被降成void test( char* const array )
這樣以來,我們在函式宣告中的陣列大小限制是無效的,宣告 void test( char array[20] ) 並不能保證一定會接收到乙個大小20的陣列,即任何 char 都會被降價為 char* ,這樣就增加了程式出錯的可能性。要解決這樣乙個問題,我們可以用c++的陣列引用作為引數,看以下**:
void test( char (&array)[20] )//是不是很像 char *p[20] 和 char (*p)[20] 的區別?
char array[20] = ;
cout << sizeof(array) << endl;
test( array );
這樣 test 函式就只能接收大小為 20 的 char,看如下**:
char array1[10] = ;
char array2[20] = ;
test(array1);//error:實參不是大小為 10 的 char
test(array2);//ok
陣列指標和陣列引用做引數的區別
template void func1 t t template void func2 tt,tt int main 1 在c 中可以定義陣列的引用,用以解決c中無法解決的 陣列降價 問題,我們先來看看什麼是 陣列降價 先看如下 void test char array 20 char array ...
指標陣列和陣列指標的區別
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...
指標陣列和陣列指標的區別
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...