2014-10-29 41 views
0

我已经使用动态内存分配在C中创建了2-D数组。传递使用动态内存分配创建的2维阵列

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[]),在方括号的尺寸不能被留为空,并且我不能动态地要么变化的参数初始化。

你能告诉我一个解决这个问题的方法吗?

+0

我没''检查此链接 – phanitej 2014-10-29 07:02:58

+0

x =(int **)malloc(2 * sizeof(int));' - >'x =(int **)malloc(k * sizeof(int *));' – BLUEPIXY 2014-10-29 21:47:44

回答

0

在功能Sum(int *x[]),在方括号的尺寸不能被留为空

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

你需要传递数组维度作为单独的参数,反正让Sum可以正常完成自己的工作,但你肯定可以声明xint *x[]甚至int **x

如果您使用的是C99编译器或支持VLAS一个C2011编译器,你可以使用运行时可变大小的数组:

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

甚至

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