返回数组指针的函数
首先,数组不能被拷贝,所以函数不能返回数组,但可以返回数组的指针或引用,返回数组的指针有一下几种方式:
1.使用类型别名
#include <iostream> using namespace std; int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; typedef int type[10]; //或using type=int[10],type是类型别名 type *sum(int(&a)[10]) { return &a; //不能返回局部变量的指针或引用,所以函数形参采 & } int main(int argc,char *argv[]) { int(*p)[10] = sum(b); int *a = *p; for (int i = 0; i < 10; i++) cout << *(a + i) << endl;; return 1; }
2.直接定义
#include <iostream> using namespace std; int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int(*sum(int(&a)[10]))[10] //数组的维度放在最后 { return &a; } int main(int argc,char *argv[]) { int(*p)[10] = sum(b); int *a = *p; for (int i = 0; i < 10; i++) cout << *a++<< endl;; return 1; }
3.使用auto
#include <iostream> using namespace std; int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; auto sum(int(&a)[10])->int(*)[10] //auto fun(形参列表)->int(*)[10],将真正的类型写后面 { return &a; } int main(int argc,char *argv[]) { int(*p)[10] = sum(b); int *a = *p; for (int i = 0; i < 10; i++) cout << *a++<< endl;; return 1; }
4.使用decltype
#include <iostream> using namespace std; int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; decltype(b) *sum(int(&a)[10]) //使用decltype { return &a; } int main(int argc,char *argv[]) { int(*p)[10] = sum(b); int *a = *p; for (int i = 0; i < 10; i++) cout << *a++<< endl;; return 1; }