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

动态二维数组的转置问题

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

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

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

我的代码如下,我想将随便给定一个二维数组传到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 python动态规划:N根火柴摆出的最大数字
  • ¥20 (标签-excel)
  • ¥200 求idea10和MyEclipse7.1
  • ¥20 vb6.0截取当前窗体保存为jpg文件
  • ¥20 苹果手机不使用大疆sdk怎么获取遥控器控制信息或如何接入大疆sdk并且成功上架sdk
  • ¥20 woocommerce 注册按键重定向
  • ¥100 求书法图像文字切割代码
  • ¥15 同一个波形探测距离不同的目标,为什么fft之后得到的频谱图会发生移动,不应该时移不改变幅度谱吗(标签-matlab)(相关搜索:matlab仿真)
  • ¥15 Proteus仿真程序只能执行一次
  • ¥15 语音识别websocket报错