假设我用以下内容初始化了一个矩阵:
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/