在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); }