c - 使用指向指针的指针初始化矩阵?

标签 c arrays pointers

假设我用以下内容初始化了一个矩阵:

double** m = (double**) calloc(count, sizeof(*double));
for (int i = 0; i < count; i++){
        *(m+i) = (double*) calloc(count, sizeof(double));
}

现在我想将此矩阵传递给具有以下声明的函数:

double func(void* params)

以下是从参数中获取矩阵的正确方法吗:

double** m = *(double**) params;

那我就可以正常访问m中的元素了吗?例如

double a = m[1][2];

最佳答案

对于初学者来说,这段代码片段

double** m = (double**) calloc(count, sizeof(double));
                                      ^^^^^^^^^^^^^
for (int i = 0; i < count; i++){
        *(m+i) = (double*) calloc(count, sizeof(double*));
                                         ^^^^^^^^^^^^^^^  
}

无效。

我想你的意思是

double** m = (double**) calloc(count, sizeof(double *));
                                      ^^^^^^^^^^^^^^^^
for (int i = 0; i < count; i++){
        *(m+i) = (double*) calloc(count, sizeof(double));
                                         ^^^^^^^^^^^^^  
}

这个函数声明

double func(void* params);

没有意义。数组(矩阵)的大小未知。您应该指定大小。

函数可以这样声明

double func(void* params, int size );

在你可以编写的函数中

double **a = params;

并使用像这样的表达方式

a[i][j]

其中 i 和 j 属于范围 [0, count)

然后像这样调用函数

func( m, count );

关于c - 使用指向指针的指针初始化矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42286610/

相关文章:

javascript - 切片数组并从 RTL/LTR 转换

python - 如何从另一个字符串数组中减去一个字符串数组?

c - "called object is not a function"错误 - C

c - 如何在不使用 c 中的格式说明符的情况下打印 char、integer、float 和 double 值

c - AUTH 命令时 Hotmail/Outlook.com 连接失败

arrays - 如何从 int[][] 中提取行作为 postgres 中的 int[]

c - 如何将多维指针/数组传递给递归函数

c - C 中的结构指针

c - ARM Assembler - 循环卡住

c - 为什么在未设置 DBUS_SESSION_BUS_ADDRESS 时 g_file_copy 返回 Operation not supported