假设我使用以下内容初始化了一个矩阵:
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)
以下是从params获取矩阵的正确方法:
double** m = *(double**) params;
然后我可以正常访问m中的元素? E.g。
double a = m[1][2];
答案 0 :(得分:1)
你没有说你如何称呼这个功能。但如果调用是func(m)
,则函数中的代码将为double** m = params;
您发布的代码是违规行为(将double *
分配给double **
)。
答案 1 :(得分:1)
对于初学者这段代码
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 );