Implémentation de la logique d'échange
Maintenant, mettons en œuvre la logique d'échange réelle en utilisant des pointeurs.
Attribution des adresses aux pointeurs
Tout d'abord, nous devons faire pointer nos pointeurs vers nos variables en attribuant les adresses de a et b respectivement à ptra et ptrb :
// Assign addresses to pointers
ptra = &a;
ptrb = &b;
Algorithme d'échange utilisant des pointeurs
La clé pour échanger des valeurs avec des pointeurs est de manipuler les valeurs aux emplacements mémoire, pas seulement les pointeurs eux-mêmes. Voici comment nous allons procéder :
- Stockez la valeur de
a (accédée via *ptra) dans la variable temporaire temp
- Attribuez la valeur de
b (accédée via *ptrb) à a (en utilisant *ptra)
- Attribuez la valeur temporaire (valeur originale de
a) à b (en utilisant *ptrb)
Mettez à jour votre fichier main.c en ajoutant le code suivant à l'endroit indiqué à l'étape précédente :
#include <stdio.h>
int main() {
// Declare variables
int a, b;
int *ptra, *ptrb;
int temp;
// Get input from user
printf("Enter value for a: ");
scanf("%d", &a);
printf("Enter value for b: ");
scanf("%d", &b);
// Display original values
printf("\nOriginal values:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
// Assign addresses to pointers
ptra = &a;
ptrb = &b;
// Display memory addresses (optional but helpful for understanding)
printf("\nMemory addresses:\n");
printf("Address of a: %p\n", ptra);
printf("Address of b: %p\n", ptrb);
// Swap the values using pointers
temp = *ptra; // Store value of a in temp
*ptra = *ptrb; // Assign value of b to a
*ptrb = temp; // Assign original value of a to b
// Display swapped values
printf("\nAfter swapping:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
Compréhension de la logique d'échange
Comprenons exactement comment l'échange fonctionne :
temp = *ptra; - L'opérateur * déréférence le pointeur, accédant à la valeur à l'emplacement mémoire. Cette ligne stocke la valeur de a dans temp.
*ptra = *ptrb; - Cela attribue la valeur de b à l'emplacement mémoire de a, modifiant effectivement la valeur de a.
*ptrb = temp; - Cela attribue la valeur originale de a (stockée dans temp) à l'emplacement mémoire de b, achevant l'échange.
Après ces opérations, les variables a et b ont échangé leurs valeurs sans être directement modifiées - nous avons seulement modifié les valeurs à leurs emplacements mémoire.