指向c中的矩阵的指针

时间:2012-01-04 20:30:29

标签: c arrays pointers

在我的c应用程序中我有这个typedef:

typedef double mat[2][2];

这是我的功能声明:

aaa(mat bbb, mat ccc, mat * ddd)

在我的代码中,我想计算数学中每个成员的总和,并将结果写入ddd。 我是通过循环完成的,这是主线:

*ddd[i][j] = bbb[i][j] + ccc[i][j];

但是我在ddd中得到了错误的结果。 当我从ddd中删除指针时,我得到了正确的结果,但由于我想通过指针将它返回给用户,我希望得到你的帮助。

我的代码有什么问题?

4 个答案:

答案 0 :(得分:3)

你写错了地址。它应该是:

(*ddd)[i][j] = bbb[i][j] + ccc[i][j];

或只是将原型更改为

aaa(mat bbb, mat ccc, mat ddd)

因为无论如何数组都会衰减为指针。 ddd将是一个副本,但它指向的地址将与原始地址相同。

答案 1 :(得分:1)

传递数组与传递第一个成员的地址相同。由于您的类型是数组,因此您不需要函数定义中的*

执行:

aaa(mat bbb, mat ccc, mat ddd)
{
    // whatever
    ddd[i][j] = bbb[i][j] + ccc[i][j];
    // whatever else
}

你很好

答案 2 :(得分:1)

在C中,用作函数参数的数组会衰减到指向数组第一个成员的指针,因此已经通过引用传递。所以在你的情况下,没有必要传递一个指向数组的显式指针,因为指针转换已经在C编译器的编译过程中发生了。

答案 3 :(得分:0)

[]的优先级高于*,您应该使用括号。

(*ddd)[i][j] = bbb[i][j] + ccc[i][j];

不需要将ddd作为指针传递。

aaa(mat bbb, mat ccc, mat  ddd)

ddd[i][j] = bbb[i][j] + ccc[i][j];

ddd已经是指向矩阵的指针,上面的代码可以正常工作。