Permuter deux variables sans utilisation d'une variable temp

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - Modifié le 30 mai 2022 à 02:11
Note : lami20j est l'auteur d'origine de l'astuce.


Utilisation de pointeurs

Le code
#include <stdio.h>
void change(int *,int*);

int main(void) {
  int a=2,b=5;
  printf("Avant : a=%d,b=%d\n",a,b);

  change(&a,&b);

  printf("Apres : a=%d,b=%d\n",a,b);
  return 0;
}

void change(int *a,int *b) {

  *a += *b;
  *b = *a-*b;
  *a = *a-*b;
}

Le résultat
lami20j@debian:~/trash$ gcc permuter_var.c
lami20j@debian:~/trash$ ./a.out
Avant : a=2,b=<underline>5</underline>
Apres : a=<underline>5</underline>,b=2

Utilisation d'une macro

Code :
#include <stdio.h>
#define PERMUTER(x,y) x ^= y, y ^= x, x ^= y

int main (void) {
  int a=2,b=5;
  printf("Avant : a=%d,b=%d\n",a,b);

  PERMUTER(a,b);

  printf("Apres : a=%d,b=%d\n",a,b);
  return 0;
}

Le résultat
vlmath@debian:~$ gcc permuter_var.c
vlmath@debian:~$ ./a.out
Avant : a=2,b=<underline>5</underline>
Apres : a=<underline>5</underline>,b=2

Remarque
Le nom de la macro, ou de ses variables, peut naturellement être changé.