传递使用动态内存分配创建的二维数组

时间:2014-10-29 06:47:35

标签: c

我使用动态内存分配在C中创建了一个二维数组。

int **x;

x=(int **)malloc(2*sizeof(int)); 

for(i=0;i<k;i++)

x[i]=(int*)malloc(K*sizeof(int));

现在,让我们将此数组作为参数传递给名为Sum的函数。

Sum(x);

在函数Sum(int *x[])中,方括号中的维度不能为空,我也无法使用动态变化的参数进行初始化。

你能否告诉我这个问题的解决方案。

1 个答案:

答案 0 :(得分:0)

  

在函数Sum(int *x[])中,方括号中的维度不能为空

当然可以;在函数参数声明的上下文中,T a[N]T a[]被解释为T *a;所有这三个都将a声明为T的指针,而不是T的数组。

您需要将数组维度作为单独的参数传递,以便Sum可以正常工作,但您当然可以将x声明为int *x[]甚至int **x

如果您使用的是支持VLA的C99编译器或C2011编译器,可以使用运行时变量来调整数组的大小:

int Sum( size_t cols, int *x[cols] )

甚至

int Sum( size_t rows, size_t cols, int x[rows][cols] ) 
相关问题