我从 C 中断了一段时间,现在又回到了它。
如果我想创建一个 double 的二维数组,我可以通过两种方式实现:
double** m_array = (double**) malloc(2*sizeof(double*));
double* m_array = (double*) malloc(2*sizeof(double));
或
double array[2][2];
但是,当我希望传递 malloc 数组而不是传递另一个数组时,似乎有两个约定:
//allowed for passing in malloc'd array, but not for other array
func_m(m_array) //allowed
func_m(array) //disallowed
func_m(double** m_array)
//allowed for passing in either array; required for passing in non-malloc'd array
func(m_array) //allowed
func(array) //allowed
func(double array[][2])
首先,除了它是一个指向指针数组的指针之外,我不需要任何信息。但它只能是一个 malloc 数组。
在第二个中,我需要传递 double* 数组指向的每个数组的长度。这看起来很愚蠢。
我错过了什么吗?提前致谢。
最佳答案
第一个根本不创建二维数组。它创建了一个指针数组,显然指向任何地方。如果您确实将每个指针初始化为一个数组,那仍然是一个数组的数组,而不是一个二维数组。
为什么不直接创建一个二维数组?
double* dynamicArray = malloc(rows * columns * sizeof (double));
或
double autoArray[rows][columns];
然后您可以将其中任何一个与此功能一起使用:
void func(double* array, size_t rows, size_t columns);
关于c - 在 C 中传递二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847910/