首先,數組不能被拷貝,所以函數不能返回數組,但可以返回數組的指針或引用,返回數組的指針有一下幾種方式:
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; }