一个函数返回二维数组的方法有两种:
第一种:
<span style="font-size:14px;">int (*f())[10]
{
int (*p)[10] = new int[10][10];
int start = 0;
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
p[i][j] = start++;
return p;
}</span>
首先解释一下函数的声明:
f():说明f是一个无参的函数;
(*f()):说明我们可以对调用
f的
结果进行解引用;
(*f())[10]:解引用的结果是一个数组,包含十个元素;
int (*f())[10]:元素的类型为int。
这就说明f的返回值是一个指向有十个元素的数组的指针。
二维数组本质上也是一个数组,只不过它的元素也是数组而已,所以可以用返回一个指向数组的指针来表示返回一个二维数组。
int (*p)[10] = new int[10][10];
用new操作符产生二维数组的方法。此处new的返回值类型是指向数组的指针,而不是int**。
以下是调用演示:
int main()
{
int (*p)[10];
p = f();
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
cout << p[i][j] << endl;
system("pause");
return 0;
}
第二种:
使用指向指针的指针,
int **f()
{
int **p = new int*[10];
int n = 0;
for (int i = 0; i < 10; i++)
{
p[i] = new int[10];
for(int j = 0; j < 10; j++)
p[i][j] = n++;
}
return p;
}
调用:int** p = f();
注意的一点就是int** 和 int(*p)[]不能相互替换,虽然都可以以p[i][j]的方式使用。