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 |


⬅️ Voltar ao Sumário da Especialização