1.返回一维数组
- 1.使用static
#include <iostream>
using namespace std;
int* function()
{
static int arr[3] = { 0, 1, 2};
return arr;
}
int main()
{
int *arr = function();
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
}
- 2.使用new
#include <iostream>
using namespace std;
int* function()
{
int* arr= new int[3]{ 0, 1, 2};
return arr;
}
int main()
{
int *arr = function();
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
}
使用引用
#include <iostream>
using namespace std;
const int N = 3;
int(&func())[N];
int (&func())[N]
{
static int arr[N]{0, 1, 2};
return arr;
}
int main()
{
// int*&&p = func(); // also OK, why?
int *p = func();
cout << p[0] << endl;
cout << p[1] << endl;
cout << p[2] << endl;
}
简化版本
#include <iostream>
using namespace std;
const int N = 3;
typedef int intarr[N];
intarr &func() //返回数组的引用
{
static int arr[N]{0, 1, 2};
return arr;
}
int main()
{
int *p = func();
cout << p[0] << endl;
cout << p[1] << endl;
cout << p[2] << endl;
}
使用auto关键字
#include <iostream>
using namespace std;
const int N = 3;
auto func()->int(&)[N] //返回数组的引用
{
static int arr[N]{0, 1, 2};
return arr;
}
int main()
{
int *p = func();
cout << p[0] << endl;
cout << p[1] << endl;
cout << p[2] << endl;
}
使用decltype关键字
#include <iostream>
using namespace std;
const int N = 3;
int arra[N];
decltype(arra)& func() //返回数组的引用
{
static int arr[N]{0, 1, 2};
return arr;
}
int main()
{
int *p = func();
cout << p[0] << endl;
cout << p[1] << endl;
cout << p[2] << endl;
}
2.返回二维数组
- 1.使用动态数组
#include <iostream>
using namespace std;
const int N = 3;
void printArray(int** arr)
{
for(int i = 0;i<N;++i)
{
for(int j = 0;j<N;++j)
{
cout << arr[i][j];
}
cout << endl;
}
}
int** getArray()
{
int** arr = new int*[N];
for(int i=0;i<N;++i)
{
arr[i] = new int[N];
for(int j=0;j<N;++j)
{
arr[i][j] = i+j;
}
}
return arr;
}
int main()
{
int **arr = getArray();
printArray(arr);
return 0;
}
- 2.使用static
#include <iostream>
using namespace std;
const int N = 3;
void printArray(int arr[][N])
{
for(int i = 0;i<N;++i)
{
for(int j = 0;j<N;++j)
{
cout << arr[i][j];
}
cout << endl;
}
}
int (*(getArray)())[N] // int (*getArray())[N]也可以
{
static int arr[N][N] = {{0,1,2},{3,4,5},{6,7,8}};
return arr;
}
int main()
{
int (*arr)[N] ;
arr = getArray();
printArray(arr);
return 0;
}
简化版本
#include <iostream>
using namespace std;
const int N = 3;
void printArray(int arr[][N])
{
for(int i = 0;i<N;++i)
{
for(int j = 0;j<N;++j)
{
cout << arr[i][j];
}
cout << endl;
}
}
typedef int (*DoublePointer)[N];
DoublePointer getArray()
{
static int arr[N][N] = {{0,1,2},{3,4,5},{6,7,8}};
return arr;
}
int main()
{
int (*arr)[N] ;
arr = getArray();
printArray(arr);
return 0;
}
- 3.使用struct
#include <iostream>
using namespace std;
const int N = 3;
struct ArrStruct
{
int arr[N][N];
};
void printArray(ArrStruct var)
{
for(int i = 0;i<N;++i)
{
for(int j = 0;j<N;++j)
{
cout << var.arr[i][j];
}
cout << endl;
}
}
ArrStruct getArray()
{
ArrStruct var;
for(int i = 0;i<N;++i)
{
for(int j = 0;j<N;++j)
{
var.arr[i][j] = i + j;
}
}
return var;
}
int main()
{
ArrStruct arr;
arr = getArray();
printArray(arr);
return 0;
}