把一个二维数组作为函数形参,需要指定数组的列数,但是这样太不方便了,如何解决?

如题所述

第1个回答  2017-03-21

使用二维指针

   int **num = (int **)malloc(n * sizeof(int *));
    for(y = 0;y < n;y++)
         num[y] = (int *)malloc(n * sizeof(int));
   //原型
   int function(int *num,int size_x,int size_y) ;

追问

这样在函数里还能用a[][]这种两个方括号的方式使用数组吗?

追答

可以的

抱歉,忽然发现写错了,function(int ** num)

下面是以前写的,一个问题的答案

    //DATATYPE 数据类型
/*变长数组的创建
     1.如果编译器支持 c99,则可以直接使用变长数组 num[y][x]
     2.一维数组模拟二维数组,优点是简单,缺点是下标不方便
     DATATYPE *num = (DATATYPE *)malloc(x * y * sizeof(DATATYPE));
     3.二级指针申请二维数组num[y][x]
     DATATYPE **num = (DATATYPE **)malloc(y * sizeof(DATATYPE *));

     for(i = 0;i < y;i++)
         num[i] = (DATATYPE *)malloc(x * sizeof(DATATYPE));
     4.数组指针申请二维数组:因为参量 DATATYPE *num[不支持变量] 的原因,无法在函数间传递数据
     */

本回答被提问者采纳
第2个回答  2017-03-21
可考虑使用一维指针,即数组首指针,并在函数参数中给出行和列的尺寸,比如:
void fun(int *p,int n,int m) { ... }
...
int a[4][3];
fun(a,4,3);本回答被网友采纳
相似回答