2013-02-15 2 views
0

Je ai une matrice M[2][2] et que vous voulez faire un appel à la fonction dontModify(M) qui va jouer avec les éléments de M, mais pas les changer. Quelque chose comme:Passer le pointeur sur la fonction SANS modifier l'argument?

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

... mais sans avoir la fonction changer M dans le processus. Quelque chose de pratique qui permettrait d'accomplir cela?

+0

Vous pouvez utiliser le mot-clé const lors de la transmission de votre argument. Mais vous devrez faire attention lorsque vous passez votre pointeur. Il y a deux façons de const-corriger: Conserver le pointeur et retaper la valeur vers laquelle il pointe. Si vous voulez être sûr, essayez deModifier (M const * const pointerM). Considérons [ceci] (http://en.wikipedia.org/wiki/Const-correctness). –

Répondre

3

Créez une copie locale de la matrice dans la fonction, une copie que vous pouvez faire avec ce que vous voulez.


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

Ou encore plus simple: passez la valeur de la matrice à la fonction –

+0

@ ring0 Cela nécessiterait de la placer dans un 'struct'. – unwind

+0

@ ring0 Je suis désolé, excusez mon ignorance. Comment ferais-tu ceci? – user1505713

0

Franchement n'undestand pas votre problème. Vous travaillez avec matrix, il passera donc par pointeur sur function. Il suffit donc de créer une copie de votre matrice, de jouer avec, de détruire la copie avant de revenir. Dans le cas où cet appel sera très fréquent, vous pouvez essayer de gagner du temps et de travailler sur place, n'oubliez pas d'échanger les éléments diagonaux avant le retour.

Questions connexes