函数返回值为二维数组指针完结篇

提示:文章

文章目录

前言

前期疑问:
本文目标:


一、背景

最近

四、最终篇

所以最后关于函数返回值为二维数组指针这个问题迎来了完结。

以下是静态二维数组传实参,形参是二维数组指针。在函数内部创建指针数组,返回指针数组的地址用二级指针接收,在函数外部正常解析

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++函数返回二维数组指针, 为什么不能用二级指针直接指向二维数组


总结

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值