函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。
1.声明一个返回数组指针的韩函数,返回数组指针的函数形式如下所示:
Type (*function(parameter_list)) [dimension] //类似于其他数组的声明,Type表示元素的类型,dimension表示数组的大小。(*function(parameter_list))两端的括号必须存在。如果没有这对括号,函数的返回类型将是指针的数组。
可以按照以下的顺序来逐层理解改声明的含义:
func(int i)表示调用func函数时需要一个int类型的实参
(*func(int i)) 意味着我们可以对函数调用的结果执行解引用操作
(*func(int i)) [10] 表示解引用func的调用将得到一个大小是10的数组
int (*func(int i)) [10]表示数组中的元素是int类型
2.使用尾置返回类型
尾置返回类型跟在形参列表后面并以一个->符号开头。为了表示函数真正的返回类型跟在形参列表之后,我们再本应该出现返回类型的地方放置一个auto:
//func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组
auto func(int i) ->int(*)[10];
因为我们把函数的返回类型放在了形参列表之后,所以可以清楚的看到func函数返回的是一个指针,并且该指针指向了含有10个整数的数组。
3.使用decltype
还有一种情况,如果我们知道函数返回的指针将指向哪个数组,就可以使用decltype关键字声明返回类型。例如,下面的函数返回一个指针,该指针根据参数i的不同指向两个已知数组中的某一个:
int odd[] = {1,2,3,4,5};
int even[] = {0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype (odd) *arrPtr(int i)
{
return (i % 2)? &odd : & even;//返回一个指向数组的指针
}
arrPtr使用关键字decltype表示它的返回类型是个指针,并且该指针所指的对象与odd的类型一致。因为odd是数组,所以arrPtr返回一个指向含有5个整数的数组的指针。有一个地方需要注意:decltype并不负责把数组类型转换成对应的指针,所以decltype的结果是个数组,要想表示arrPtr返回指针还必须在函数声明时加一个*符号。