陣列指標和陣列引用做引數的區別

2021-09-06 10:34:30 字數 1123 閱讀 2429

陣列指標和陣列引用做引數的區別(是否能夠限定陣列大小、陣列降價) 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...