提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
最近
四、最终篇
所以最后关于函数返回值为二维数组指针这个问题迎来了完结。
以下是静态二维数组传实参,形参是二维数组指针。在函数内部创建指针数组,返回指针数组的地址用二级指针接收,在函数外部正常解析
int ReturnSecondArrayPointer()
{
printf("ReturnSecondArrayPointer\n");
int array[5][6] = {0};
int **p = DeliverArrayWithSecondPointer4(array);
// 函数中创建的指针数组,返回指针数组的地址用二级指针接收,在函数外部可以正常解析
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 6; j++)
{
printf("%d ", p[i][j]);
}
printf("\n");
}
printf("\n");
// 二维数组无需从函数中返回,因为二维数组array地址直接可以难道
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 6; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
}
打印结果
ReturnSecondArrayPointer
0 0 0 0 0 0
0 1 2 3 4 5
0 2 4 6 8 10
0 3 6 9 12 15
0 4 8 12 16 20
0 0 0 0 0 0
0 1 2 3 4 5
0 2 4 6 8 10
0 3 6 9 12 15
0 4 8 12 16 20
0 0 0 0 0 0
0 1 2 3 4 5
0 2 4 6 8 10
0 3 6 9 12 15
0 4 8 12 16 20
所以最后关于函数返回值为二维数组指针这个问题迎来了完结。
基于这个问题产生了两篇文章:《函数返回值为二维数组指针》、《二维数组传参的三种方式》。函数返回值为二维数组指针,二维数组传参的三种方式
最终的方案就是上述的方案。如果一定要在函数中返回二维数组。分两种情况
1、返回的二维数组是局部变量,得使用malloc申请堆内存,将数组数据存在堆内存上再返回。这种情况直接返回指向二级指针就行。这个二级指针是指向,指向二维数组的指针数组的。当然也可以再函数内部创建static二维数组,但是一般不这么使用。
2、返回的二维数组是静态二维数组,在函数内创建一个指针数组。指针数组存储二维数组的一维数组成员的首地址。再返回指针数组的地址,用二级指针接收这个地址,在函数外解析数据。当然这个指针数组也同样是使用static或者动态创建。
当然到这个时候我凸显了自己的傻逼之处。就是我想返回二维数组的地址。但是实际上二维数据的地址一致就唾手可得。即array。我竟然还一直想将传进函数内的二维数组地址再返回出来。简直就是脱裤子放屁。
最后附上过程中参考的几篇文章。知识分享:C/C++函数返回二维数组指针, 为什么不能用二级指针直接指向二维数组
总结
未完待续