传递函数指针而不修改参数?
我有一个矩阵M[2][2]
,并且想打电话给功能dontModify(M)
,它将与M的元素一起玩,但不会改变它们。例如:传递函数指针而不修改参数?
dontModify(M):
swap off-diagonal elements;
take determinant of M;
return determinant;
...但是在过程中没有功能改变M.任何能够实现这一点的方便吗?
在函数内部创建矩阵的本地副本,您可以随心所欲地执行任何操作。
int some_function(int matrix[2][2])
{
int local_matrix[2][2] = {
{ matrix[0][0], matrix[0][1] },
{ matrix[1][0], matrix[1][1] },
};
/* Do things with `local_matrix` */
/* Do _not_ use `matrix` */
...
}
甚至更简单:将值传递给函数 – 2013-02-15 08:51:51
@ ring0尽管如此,这需要将其封装在“struct”中。 – unwind 2013-02-15 09:12:10
@ ring0对不起,请原谅我的无知。你会如何做到这一点? – user1505713 2013-02-15 09:51:06
坦率地说没有你已了解的问题。你正在使用矩阵,所以它将通过指针传递给函数。因此,只需创建一个矩阵的副本,使用它,在返回之前销毁副本。如果此通话非常频繁,您可以尝试节省一些时间并就地工作,只是不要忘记在返回之前交换非对角线元素。
传递参数时,可以使用const关键字。但传递指针时需要小心。有两种常量正确性的方法:保留指针并保留它指向的值。如果你想确定,试试dontModify(M const * const pointerM)。考虑[this](http://en.wikipedia.org/wiki/Const-correctness)。 – 2013-02-15 08:24:54