c - 在 C 中传递二维数组

标签 c pointers multidimensional-array argument-passing

我从 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/

相关文章:

c++ - 为什么我可以在头文件中声明数组,但不能声明指针?

php - 使用 MySQL 中的键将数组的 JSON 数组创建为单个 JSON 对象

php - 基于数组在mysql表中添加多行

c - 使用结构的段错误

c - 二进制文件开头是什么

c++ - 链表 - 模板 - 指针

arrays - 无循环的动态矩阵乘法

c - 这个 for 循环中发生了什么

c++ - 处理失败的内存分配

c++ - 数组指针的增量