爷是少爷 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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改