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