返回数组指针

返回数组指针

因为数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或者引用。其中最直接的方法就是使用类型别名。

typedef int arrT[10]; //arrT是一个类型别名,表示含有10个整型数的类型
using arrT = int[10]; //同上的等价声明
arrT* func(int i);    //函数func返回一个指针,指针指向一个含有10个整型数的数组
声明一个返回数组指针的函数

如果不使用类型别名,则数组的维度必须跟在函数名字之后。
例如:

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

则可以逐层理解函数意思:
* func(int i)是一个函数
* *func(int i)表示我们可以对函数返回值进行解引用,可将它替换为一个普通变量,例如a
* 将第二步替换为a,得到int a[10]为一个长度为10的整型数组,表示函数返回的值是一个解引用后为数组的类型变量,即为数组指针。

同理,一个返回函数指针的函数该怎么写呢,如下所示:
* 首先,一个函数指针可以写成int (*a)(int,int)
* 然后,将func替换成函数,如下写法

int (*func(int i))(int,int)

则表示了func函数返回的值解引用后为一个函数,即返回的是一个函数指针。

举个例子

int add(int a,int b)
{
    return a+b;
}

int (*funcadd())(int,int)       //一个返回函数指针的函数
{
    int (*a)(int,int) = &add;   //定义一个函数指针,并为其赋值
    return a;
}
int main()
{
    int a=1,b=2;
    cout<<(*funcadd())(a,b)<<endl; //调用函数得到函数指针,解引用后再调用返回函数
    return 0;
}
尾置返回类型

C++11中简化了上述的声明方法,可以使用尾置返回类型,尾置返回类型跟在形参列表后面并以一个->符号开头。为了表示函数真正返回类型在形参列表之后,我们在本应该出现返回类型的地方放置一个auto,例如:

auto func(int i) -> int(*)[10];

可以清楚地看到函数返回类型是一个数组。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值