返回数组指针

来源:互联网 发布:python关闭网页 编辑:程序博客网 时间:2024/05/19 14:37

返回数组指针

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

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];

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

原创粉丝点击