C++:引用(数组引用)
在C++里,数组引用如下:
//第一种方法(常用)
//1,定义数组类型
typedef int(my_arr)[5];
typedef int my_arr1[5];
//2,建立引用
my_arr1& arref = arr;//建立引用,相当于int &b=a的模型
//第二种方法(常用)
//直接定义引用
int (&arref2)[5] = arr;//int &b=a
//第三种方法
typedef int(&my_arr3)[5];//建立引用数组类型
my_arr3 arref3 = arr;
char str1[] = "helloworld";
char (&str2)[6] = str1;
最近一个数组引用,看着char (&str2)[6]有点疑惑,为什么要加括号,以下是解释:
括号的优先级最高,‘str2’首先与’&'相结合,表明’str2’是一个引用。
接着’&str2’与右边的’[6]'结合,表明str2是数组的引用,且数组中有6个元素。
最后’(&str2)[6]'与左边的’char’结合,表明被引用的数组是一个char类型的数组。
在声明数组的引用时,有两个地方需要注意:
第一个地方是’&'的位置,它必须要与reference的名字用括号括起来。
第二个地方是必须要指定被引用的数组中元素的个数,且元素的个数必须与实际所引用的数组中元素的个数严格匹配。
两种错误的声明方式:
1, type1: char& str2[6] = str1;
** vs编译报错:array of reference is not allowed(不允许使用元素为引用的数组)**
解读一下这句代码:
‘str2’先与右边的’[6]'结合,表示’str2’是一个数组。
接着’str2[6]'与左边的’char&'结合,表示数组中的元素是一个char的引用。
1,type2: char (&str2)[] = str1;
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);
}
1575

被折叠的 条评论
为什么被折叠?



