爷是少爷 2022-05-26 22:31 采纳率: 81.8%
浏览 81
已结题

动态二维数组的转置问题

问题遇到的现象和发生背景

今天写代码发现一个问题,就是动态二维数组可以通过传参的方式传到另一个函数吗?

问题相关代码,请勿粘贴截图

我的代码如下,我想将随便给定一个二维数组传到Acc里面并进行转置,当然 在主函数里转置已经完成了,当我们在使用的时候肯定不会是在主函数里使用吧,肯定是随机给出一个二维数组,最后给出转置后的结果,难在二维数组的行数和列数不确定,有知道的小伙伴一定要告诉我啊,谢谢

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void Acc(int *acc, int n, int m)
{
    
}
int main()
{
    int arr[2][3] = { {1,2,3},{4,5,6} };
    
    int n = 0, m = 0;
    n = sizeof(arr) / sizeof(arr[0]);//计算二维数组的行数
    m= sizeof(arr[0]) / sizeof(arr[0][0]);//计算二维数组的列数
    Acc(&arr, n, m);
    ////定义动态二维数组
    //int** p;  //定义二维指针。
    //p = (int**)malloc(sizeof(int*) * m); //申请一组一维指针空间。
    //for (int i = 0; i < m; i++)
    //{
    //    p[i] = (int*)malloc(sizeof(int) * n);  //对于每个一维指针,申请一行数据的空间。
    //}
    ////将数组的值转置并赋值给动态数组
    //for (int i = 0; i < m; i++)
    //{
    //    for (int j = 0; j < n; j++)
    //    {
    //        p[i][j] = arr[j][i];
    //        printf("%d\t", p[i][j]);
    //    }
    //    printf("\n");
    //}

    ////释放内存
    //for (int i = 0; i < m; i++)
    //    free(p[i]);
    //free(p);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • bekote 2022-05-27 11:39
    关注
    
    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
     
    int** Acc(int **acc, int n, int m)
    {
        //定义动态二维数组
        int** p;  //定义二维指针。
        p = (int**)malloc(sizeof(int*) * m); //申请一组一维指针空间。
        for (int i = 0; i < m; i++)
        {
           p[i] = (int*)malloc(sizeof(int) * n);  //对于每个一维指针,申请一行数据的空间。
        }
        //将数组的值转置并赋值给动态数组
        for (int i = 0; i < m; i++)
        {
           for (int j = 0; j < n; j++)
           {
               p[i][j] = *((int*)acc+j*m+i);
           }
        }
        return p;
    }
    int main()
    {
        int arr[2][3] = { {1,2,3},{4,5,6} };
        
        int n = 0, m = 0;
        n = sizeof(arr) / sizeof(arr[0]);//计算二维数组的行数
        m= sizeof(arr[0]) / sizeof(arr[0][0]);//计算二维数组的列数
        int **p = Acc(arr, n, m);
        
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                printf("%d\t", p[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 创建了问题 5月26日

悬赏问题

  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制