1.通过类型别名
typedef int arrT[10];//arrT是一个类型别名,它表示的类型是一个含有10个整数的数组
using arrT=int [10];//同上
arrT*func(int);//返回一个指向含有10个整数的数组的指针
arrT &func(inti);//返回一个指向含有10个整数的数组的引用
2.不使用类型别名直接返回
如果我们想定义一个返回数组指针或引用的函数,则数组的维度必须跟在函数名字之后。然而,函数的参数列表也跟在函数名之后且在数组维度之前。
//函数形式如下
type(*function(paramter_list))[dimension];
type(&function(paramter_list))[dimension];
//举例
int(*func(int i))[10];
//由内而外理解其含义
func(int i)//表示func函数需要一个类型为int的形参
(*func(int i))//表示我们可以对函数调用的结果执行解引用操作
(*func(int i))[10]//表示我们解引用操作的结果是一个大小是10的数组
//引用以此类推
3.使用尾置返回类型
任何函数的定义都可以使用尾置返回,但这种形式对于复杂的函数最有效,比如返回类型是数组的指针或引用。尾置返回类型跟在形参列表后面并以一个->符号开头
//func接受一个int类型的实参,返回一个指针,该指针指向一个大小为10的数组
auto func(int i)->int(*)[10];
//返回一个引用
auto func(int i)->int(&)[10];
4.使用decltype
如果我们指导函数返回的指针指向的数组大小和类型,就可以使用decltype关键字声明返回类型
int odd[]={1,3,5,7,9};
int even[]={0,2,4,6,8};
decltype(odd)*arrptr(int i)
{
return(i%2)?&obb:&even;
}
decltype(odd)&arrptr(int i)
{
return(i%2)?obb:even;
}