2013-02-15 110 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

坦率地說沒有你已瞭解的問題。你正在使用矩陣,所以它將通過指針傳遞給函數。因此,只需創建一個矩陣的副本,使用它,在返回之前銷燬副本。如果此通話非常頻繁,您可以嘗試節省一些時間並就地工作,只是不要忘記在返回之前交換非對角線元素。