💻 Exemplos de Código: Cap 13 - Ponteiros e Endereçamento
Código executável completo demonstrando operadores de endereço e indireção, função swap por referência, retorno de múltiplos valores e qualificadores const.
📄 Exemplo 1: Passagem por Referência e Múltiplos Retornos (divisao_referencia.c)
#include <stdio.h>
#include <stdbool.h>
// Função que calcula quociente e resto simultaneamente através de ponteiros
bool calcularDivisaoSegura(int dividendo, int divisor, int *quociente, int *resto) {
// 1. Proteção contra ponteiros nulos e divisão por zero (CERT C)
if (divisor == 0 || quociente == NULL || resto == NULL) {
return false; // Falha na operação
}
*quociente = dividendo / divisor;
*resto = dividendo % divisor;
return true; // Sucesso
}
int main(void) {
int dividendo = 47;
int divisor = 5;
int q = 0, r = 0;
printf("====================================================\n");
printf(" 🎯 RETORNO DE MULTIPLOS RESULTADOS VIA PONTEIROS\n");
printf("====================================================\n");
if (calcularDivisaoSegura(dividendo, divisor, &q, &r)) {
printf(" Dividendo: %d | Divisor: %d\n", dividendo, divisor);
printf(" Quociente: %d\n", q);
printf(" Resto: %d\n", r);
printf(" Prova Real: (%d * %d) + %d = %d ✅\n", q, divisor, r, (q * divisor) + r);
} else {
fprintf(stderr, "[ERRO]: Operacao de divisao invalida!\n");
}
printf("====================================================\n");
return 0;
}
📄 Exemplo 2: Qualificadores const em Ponteiros (ponteiros_const.c)
#include <stdio.h>
int main(void) {
int sensorA = 100;
int sensorB = 200;
// 1. Ponteiro para Constante (dado imutável):
const int *ptrDadoFixo = &sensorA;
printf("Leitura A: %d\n", *ptrDadoFixo);
// *ptrDadoFixo = 150; ❌ ERRO DE COMPILAÇÃO
ptrDadoFixo = &sensorB; // ✅ VÁLIDO: pode apontar para o sensor B
printf("Leitura B: %d\n", *ptrDadoFixo);
// 2. Ponteiro Constante (endereço imutável):
int * const ptrEnderecoFixo = &sensorA;
*ptrEnderecoFixo = 120; // ✅ VÁLIDO: altera o sensor A
printf("Sensor A alterado: %d\n", sensorA);
// ptrEnderecoFixo = &sensorB; ❌ ERRO DE COMPILAÇÃO
return 0;
}
🧭 Navegação Rápida
| 📖 Teoria | 📊 Slides | 🧠 Quiz | 💻 Exemplos | 🧩 Exercícios | | :— | :— | :— | :— | :— | | Ler Teoria | Ver Slides | Fazer Quiz | Ver Exemplos | Praticar Exercícios |