2014-06-22 3 views
-3

Ici, j'ai essayé de créer une fonction qui permuterait deux valeurs sans une troisième variable. Quelle autre mise en œuvre pourrait fonctionner autrement que celle indiquée ci-dessous?Travailler avec le pointeur: affectation du pointeur au pointeur

void swap(int* x, int* y) 
{ 
    (*x)=(*x)+(*y); 
    (*y)=(*x)-(*y); 
    (*x)=(*x)-(*y); 

} 
+0

Vous avez besoin d'un algorithme d'échange de XOR. Veuillez le rechercher sur le wiki – ALM865

+3

Vos messages d'erreur ne concernent pas ce code. –

+0

@OliCharlesworth quel est le problème avec l'application? Pourquoi le code ci-dessus est-il invalide? – Priyanka

Répondre

3

Il semble que vous essayez de faire la XORswap trick?

#include <stdio.h> 

void swap(int* x, int* y) 
{ 
    *x^=*y; 
    *y^=*x; 
    *x^=*y; 
} 
int main(){ 
    int x = 1; 
    int y = 2; 
    swap(&x, &y); 
    printf("x = %d, y =%d\n", x, y); 
} 
+0

Bel exemple! Simple et concis – ALM865

+2

Note: S'il vous plaît ne le faites jamais dans le code. – chris

+0

Il est OK de faire du code si vous utilisez 'unsigned int'. –

0

il devrait fonctionner en fait ...

J'ai utilisé le code suivant à votre fonction:

void swap(int* x, int* y) 
{ 
    (*x)=(*x)+(*y); 
    (*y)=(*x)-(*y); 
    (*x)=(*x)-(*y); 
} 

int a1=1; 
int a2=2; 

main() 
{ 
    swap(&a1,&a2); 

    printf("a1= %d\na2= %d \n",a1 ,a2); 
} 
+0

J'avais essayé d'utiliser le même code plus tôt mais cela ne fonctionnait pas bien à ce moment-là mais maintenant ça marche des amendes. Peut-être était-ce un problème d'interprète etc. @Oli Charlesworth désolé pour le dérangement. – Priyanka