🧩 Exercícios: Ponteiros Fundamentais, Endereçamento e Referência
Spec Sistemas Com C • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 13.1 — Operador de Endereço (&) e Desreferenciação (*)
Contexto: Operador de Endereço (&) e Desreferenciação (*) no contexto de Ponteiros Fundamentais, Endereçamento e Referência.
Requisitos de Execução:
- Declarar ponteiro
int *p = &x, exibir o endereço hexadecimal e modificar o valor de x via ponteiro.
Resultado Esperado
Valor de x modificado indiretamente através do ponteiro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_1_SeuNome - Envie na tarefa:
Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int main(void) {
int x = 42;
int *p = &x;
printf("Endereco de x: %p | Valor original: %d\n", (void*)p, *p);
*p = 100;
printf("Novo valor de x: %d\n", x);
return 0;
}
🔍 Nível 2: Prática
Problema 13.2 — Passagem por Referência (Simulada em C) com Função swap()
Contexto: Passagem por Referência (Simulada em C) com Função swap() no contexto de Ponteiros Fundamentais, Endereçamento e Referência.
Requisitos de Execução:
- Implementar função
swap(int *a, int *b)que troque os valores de duas variáveis fora de seu escopo local.
Resultado Esperado
Valores trocados com sucesso na função chamadora.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_2_SeuNome - Envie na tarefa:
Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main(void) {
int v1 = 10, v2 = 20;
swap(&v1, &v2);
printf("Apos swap: v1=%d, v2=%d\n", v1, v2);
return 0;
}
⚡ Nível 3: Integração
Problema 13.3 — Retorno Múltiplo de Valores via Parâmetros de Saída
Contexto: Retorno Múltiplo de Valores via Parâmetros de Saída no contexto de Ponteiros Fundamentais, Endereçamento e Referência.
Requisitos de Execução:
- Criar função
divisao_inteira(int a, int b, int *quociente, int *resto)preenchendo ambos os resultados.
Resultado Esperado
Quociente e resto calculados e retornados via ponteiros de saída.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_3_SeuNome - Envie na tarefa:
Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
void dividir(int dividendo, int divisor, int *quo, int *resto) {
if (divisor != 0) {
*quo = dividendo / divisor;
*resto = dividendo % divisor;
}
}
int main(void) {
int q, r;
dividir(17, 5, &q, &r);
printf("17 / 5 = %d (Resto: %d)\n", q, r);
return 0;
}
🏆 Nível 4: Desafio Corporativo
Problema 13.4 — Ponteiros Constantes e Ponteiros para Constantes (const int * vs int * const)
Contexto: Ponteiros Constantes e Ponteiros para Constantes (const int * vs int * const) no contexto de Ponteiros Fundamentais, Endereçamento e Referência.
Requisitos de Execução:
- Demonstrar proteção de leitura de buffer com
const char *e ponteiro fixo comchar * const.
Resultado Esperado
Contratos de imutabilidade garantidos em nível de compilação pelo qualificador const.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_4_SeuNome - Envie na tarefa:
Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
void exibir_somente_leitura(const int *dado) {
// *dado = 50; // Erro de compilacao garantido!
printf("Dado protegido: %d\n", *dado);
}
int main(void) {
int valor = 500;
exibir_somente_leitura(&valor);
return 0;
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |