2013-02-15 37 views
0

我有一个矩阵M[2][2],并且想打电话给功能dontModify(M),它将与M的元素一起玩,但不会改变它们。例如:传递函数指针而不修改参数?

dontModify(M): 
    swap off-diagonal elements; 
    take determinant of M; 
    return determinant; 

...但是在过程中没有功能改变M.任何能够实现这一点的方便吗?

+0

传递参数时,可以使用const关键字。但传递指针时需要小心。有两种常量正确性的方法:保留指针并保留它指向的值。如果你想确定,试试dontModify(M const * const pointerM)。考虑[this](http://en.wikipedia.org/wiki/Const-correctness)。 – 2013-02-15 08:24:54

回答

3

在函数内部创建矩阵的本地副本,您可以随心所欲地执行任何操作。


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` */ 

    ... 
} 
+0

甚至更​​简单:将值传递给函数 – 2013-02-15 08:51:51

+0

@ ring0尽管如此,这需要将其封装在“struct”中。 – unwind 2013-02-15 09:12:10

+0

@ ring0对不起,请原谅我的无知。你会如何做到这一点? – user1505713 2013-02-15 09:51:06

0

坦率地说没有你已了解的问题。你正在使用矩阵,所以它将通过指针传递给函数。因此,只需创建一个矩阵的副本,使用它,在返回之前销毁副本。如果此通话非常频繁,您可以尝试节省一些时间并就地工作,只是不要忘记在返回之前交换非对角线元素。