因为数组不能被拷贝,所以函数不能返回数组,但却可以返回数组的指针或引用。
类型别名
typedef int arrT[10]; //arrT是一个类型别名,它表示的类型是含有10个整数的数组
using arrT=int[10]; //arrT的等价声明
arrT* func(int i); //func返回一个指向含有10个整数的数组的指针
声明一个返回数组指针的函数
要想在声明func时不使用类型别名,我们必须牢记被定义的名字后面数组的维度:
Type (*function(parameter_list))[dimension]
int (*func(int i))[10];
//func(int i)表示调用func函数时需要一个int类型的实参
//(*func(int i))意味着我们可以对函数调用的结果执行解引用操作
//(*func(int i))[10]表示解引用func的调用将得到一个大小是10的数组
//int (*func(int i))[10]表示数组中的元素是int类型
使用尾置返回类型
// func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组
auto func(int i) -> int(*)[10];
使用decltype
还有一种情况,如果我们知道函数返回的指针将指向哪个数组,就可以使用decltype关键字声明返回类型:
int odd[]={1,3,5,7,9};
int even[]={0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype(odd) *arrPtr(int i)
{
return (i%2) ? &odd : &even;//返回一个指向数组的指针
}