在C++里,數組也是可以引用的。
代碼如下:
1 char str1[] = "abcde"; 2 char (&str2)[6] = str1;
解讀第二句代碼,括號的優先級最高,'str2'首先與'&'相結合,表明'str2'是一個引用。
接着'&str2'與右邊的'[6]'結合,表明str2是數組的引用,且數組中有6個元素。
最后'(&str2)[6]'與左邊的'char'結合,表明被引用的數組是一個char類型的數組。
在聲明數組的引用時,有兩個地方需要注意:
第一個地方是'&'的位置,它必須要與reference的名字用括號括起來。
第二個地方是必須要指定被引用的數組中元素的個數,且元素的個數必須與實際所引用的數組中元素的個數嚴格匹配。
兩種錯誤的聲明方式:
1 //type1: char& str2[6] = str1; 2 //vs編譯報錯:array of reference is not allowed(不允許使用元素為引用的數組)
解讀一下這句代碼:
'str2'先與右邊的'[6]'結合,表示'str2'是一個數組。
接着'str2[6]'與左邊的'char&'結合,表示數組中的元素是一個char的引用。
1 //type2: char (&str2)[] = str1; 2 //vs編譯報錯:cannot convert from 'char [6]' to 'char (&)[]'
原因:需要指定所引用的數組中所含元素的數量。
數組引用的正確使用姿勢:
結合c++中模板中的非類型參數(nontype parameter)。
#include <string> template<unsigned M,unsigned N> int compare(char (&leftStr)[M], char (&rightStr)[N]) { return strcmp(leftStr, rightStr); } int main() { char str1[] = "abcde"; char str2[] = "abcdefg"; compare(str1, str2); }