我有一個矩陣M[2][2]
,並且想打電話給功能dontModify(M)
,它將與M的元素一起玩,但不會改變它們。例如:傳遞函數指針而不修改參數?
dontModify(M):
swap off-diagonal elements;
take determinant of M;
return determinant;
...但是在過程中沒有功能改變M.任何能夠實現這一點的方便嗎?
我有一個矩陣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