函数返回值的注意事项

函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。

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返回指针还必须在函数声明时加一个*符号。


猜你喜欢

转载自blog.csdn.net/zhengliuguo/article/details/79404609