我使用动态内存分配在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[])
中,方括号中的维度不能为空,我也无法使用动态变化的参数进行初始化。
你能否告诉我这个问题的解决方案。
答案 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] )