函数返回数组指针 看不太懂
有三种方法
1.声明一个返回数组指针的函数
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类型。
类似于
int arr [10]; //arr是一个含有10个整数的数组
int *p1[10]; //p1是一个含有10个指针的数组
int (*p2) [10]=&arr; //p2是一个指针,它指向含有10个整数的数组
2.使用尾值返回类型
为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置一个auto。
//func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组
auto func(int i)->int(*) [10];
//int(*) [10] 和数组的指针读法一样,先读小括号里面:是个指针类型,
//再读右边:指针指向一个含有10个元素的数组,
//最后读左边:元素的类型是int型。
因为我们把函数的返回类型放在了形参列表之后,所以可以清楚地看到func函数返回的是一个指针,并且该指针指向了含有10个整数的数组。
3.使用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;
}
arrPtr使用关键字decltype表示它的返回类型是个指针,并且该指针所指的对象与odd的类型一致。 因为odd是数组,所以arrPtr返回一个指向含有5个整数的数组的指针。
有一个地方需要注意:decltype并不负责把数组类型转换成对应的指针,所以decltype的结果是个数组,要想表示arrPtr返回指针还必须在函数声明时加一个*符号。
原文链接:https://blog.csdn.net/Firenze__/article/details/104065237