数组无法被拷贝,所以函数无法返回一个数组。但是,函数可以返回数组的指针或引用。下面是返回数组的指针或引用的方式:
typedef int arrT[10]; //arrT是一个类型别名,表示的类型是含有10个整数的数组 using arrT=int[10]; //arrT的等价声明 arrT* func(int i); // func返回一个指向含有10个整数的数组的指针
其中arrT是含有10个整数的数组的别名、因为我们无法返回数组,所以将返回类型定义成数组的指针。因此,func函数接受一个int实参,返回一个指向包含10个整数的数组的指针。
声明一个返回数组指针的函数
int arr[10]; //arr是一个含有10个整数的数组 int *pi[10]; //p1是一个含有10个指针的数组 int (*p2)[10]=&arr; //p2是一个指针,它指向含有10个整数的数组
和这些声明一样,如果我们想定义一个返回数组指针的函数,则数组的维度必须跟在函数名字之后。然而,函数的形参列表也跟在函数名字后面且形参列表应该先于数组的维度。因此,返回数组指针的函数形式如下所示:
Type (*function(parameter_list))[dimension]
类似于其他数组的声明,Type表示元素的类型,dimension表示数组的大小。(*function(patameter_list))两端的括号必须存在,就像我们定义p2时两端必须有括号一样。如果没有这对括号,函数的返回类型将是指针的数组。
举个具体的例子,下面这个func函数的声明没有使用类型别名:
int (*func(int i))[10];
可以按照以下的顺序来逐层理解该声明的含义:
原文:https://www.cnblogs.com/lightmonster/p/10993977.html