查资料说可以返回指针,但是返回指针最后只能保留指针指向的数据,也就是数组的第一个元素,其余数据在函数结束后就释放了。
有一个方法是用静态变量初始化要返回的数组,试了一下和原来没区别。
int * sum(int * array, int size){ static int * res= new int[size]; }有一个方法是在定义函数的时候就规定数组的大小,像下面这样,但是我需要定义的是大小未知的数组。
//1. 使用类型别名 typedef int arrt[10]; //arrT是一个类型别名,它表示的类型是含有10个整数的数组 using arrT = int[10]; //C++11标准新的类型别名声明语法 arrT* func(int i); //func返回一个指向含有10个整数的数组的指针 //2.方法二:直接声明一个返回数组指针的函数。其形式如下: Type (*function(parameter_list)) [dimension] //比如: int (*func(int i) ) [10]; //从里往外分析,首先函数func有一个整形的形参i,func返回一个指针,该指针指向的是含有10个整形元素的数组。 //3.使用尾置返回类型。尾置返回类型是C++11新增的语法。在任何函数的定义都能使用尾置返回,但是一般在返回类型比较复杂的函数中使用。尾置返回类型跟在形参列表后面并且是以->符号开头。例子如下: auto func(int i) -> int(*)[10]; //通过尾置返回类型语法指定了func返回类型是 int(*)[10],auto主要是为了表示真正函数的返回类型跟在形参列表之后。 //4.使用decltype关键字。这个关键字是C++11新增的。使用decltype来返回数组指针需要知道函数返回的指针将指向哪个数组。如下: int odd[] = {1, 3, 5, 7, 9}; int even[] = {0, 2, 4, 6, 8}; decltype(odd) *arrPtr(int i) { return (i % 2) ? &odd : &even; }