C++高级Return
·
返回数组指针的函数
//对int[10]数组起一个别名 arrT
using arrT = int[10];
//返回一个含有10个数组的指针
arrT* getArr(i);
解析下列声明例子
int(*func(int i))[10];
这个声明表示一个函数指针,它指向一个返回数组指针的函数,这个数组指针指向大小为10的整数数组。下面是逐步解析
- func(int i)
- func 是一个函数名
- int i 是传给函数的整数参数 i
- (*func(int i))
- 表示一个函数调用func(i) 后的结果是一个指针
- int(*func(int i))[10]
- 表示这个函数func 返回一个指向大小为10的整数数组指针
下面是使用示例
#include <iostream>
using namespace std;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int (*func(int i))[10]
{
return &arr;
}
int main()
{
//声明一个函数指针
int (*(*functionPointer)(int))[10] = func;
//调用函数指针并返回数组指针
int (*functionPointer2)[10] = functionPointer(42);
for (int i = 0 ; i < 10; i++) {
cout << (*functionPointer2)[i] << endl;
}
return 0;
}
首先我创建了一个返回一个指向大小为10的整数数组指针的函数,然后我创建了一个函数指针指向刚才的函数,最后通过调用函数指针拿到数组指针并解引用
使用尾置返回类型
上面所说的太过复杂了,可以使用尾置类型法,使返回值清晰的展示出来
auto fun(int i) -> int(*)[10]
{
}
使用decltype
#include <iostream>
using namespace std;
int odd[5] = {1 , 3 , 5 , 7 , 9};
int even[5] = {2, 4, 6, 8, 10};
decltype(odd) *pFunc(int i)
{
return (i % 2)?&even:odd;
}
decltype相当于拿到数组的类型,但是不是指针,这样的写法会更加简单
更多推荐


所有评论(0)