Implementando a Lógica de Troca
Agora, vamos implementar a lógica de troca real usando ponteiros.
Atribuindo Endereços aos Ponteiros
Primeiro, precisamos fazer com que nossos ponteiros apontem para nossas variáveis, atribuindo os endereços de a e b a ptra e ptrb, respectivamente:
// Assign addresses to pointers
ptra = &a;
ptrb = &b;
O Algoritmo de Troca Usando Ponteiros
A chave para trocar valores com ponteiros é manipular os valores nos locais de memória, e não apenas os próprios ponteiros. Veja como faremos isso:
- Armazene o valor de
a (acessado via *ptra) na variável temporária temp
- Atribua o valor de
b (acessado via *ptrb) a a (usando *ptra)
- Atribua o valor temporário (valor original de
a) a b (usando *ptrb)
Atualize seu arquivo main.c adicionando o seguinte código onde indicado na etapa 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;
}
Entendendo a Lógica de Troca
Vamos entender exatamente como a troca funciona:
temp = *ptra; - O operador * desreferencia o ponteiro, acessando o valor no local da memória. Esta linha armazena o valor de a em temp.
*ptra = *ptrb; - Isso atribui o valor de b ao local de memória de a, efetivamente alterando o valor de a.
*ptrb = temp; - Isso atribui o valor original de a (armazenado em temp) ao local de memória de b, completando a troca.
Após essas operações, as variáveis a e b trocaram valores sem modificá-las diretamente - apenas modificamos os valores em seus locais de memória.