返回数组指针的函数

//对int[10]数组起一个别名 arrT
using arrT = int[10];
//返回一个含有10个数组的指针
arrT* getArr(i);

解析下列声明例子

int(*func(int i))[10];

这个声明表示一个函数指针,它指向一个返回数组指针的函数,这个数组指针指向大小为10的整数数组。下面是逐步解析

  1. func(int i)
    • func 是一个函数名
    • int i 是传给函数的整数参数 i
  2. (*func(int i))
    • 表示一个函数调用func(i) 后的结果是一个指针
  3. 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相当于拿到数组的类型,但是不是指针,这样的写法会更加简单

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐