Implementando la lógica de intercambio
Ahora implementemos la lógica real de intercambio utilizando punteros.
Asignando direcciones a punteros
Primero, necesitamos hacer que nuestros punteros apunten a nuestras variables asignando las direcciones de a
y b
a ptra
y ptrb
respectivamente:
// Assign addresses to pointers
ptra = &a;
ptrb = &b;
El algoritmo de intercambio utilizando punteros
La clave para intercambiar valores con punteros es manipular los valores en las ubicaciones de memoria, no solo los punteros en sí. Así es como lo haremos:
- Almacenar el valor de
a
(accedido a través de *ptra
) en la variable temporal temp
- Asignar el valor de
b
(accedido a través de *ptrb
) a a
(utilizando *ptra
)
- Asignar el valor temporal (valor original de
a
) a b
(utilizando *ptrb
)
Actualice su archivo main.c
agregando el siguiente código donde se indicó en el paso anterior:
#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;
}
Comprendiendo la lógica de intercambio
Comprendamos exactamente cómo funciona el intercambio:
temp = *ptra;
- El operador *
desreferencia el puntero, accediendo al valor en la ubicación de memoria. Esta línea almacena el valor de a
en temp
.
*ptra = *ptrb;
- Esto asigna el valor de b
a la ubicación de memoria de a
, cambiando efectivamente el valor de a
.
*ptrb = temp;
- Esto asigna el valor original de a
(almacenado en temp
) a la ubicación de memoria de b
, completando el intercambio.
Después de estas operaciones, las variables a
y b
han intercambiado valores sin modificarlas directamente; solo modificamos los valores en sus ubicaciones de memoria.