🧩 Exercícios: Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
Spec Sistemas Com C • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 14.1 — Navegação em Vetores com Aritmética de Ponteiros (*(p + i))
Contexto: Navegação em Vetores com Aritmética de Ponteiros (*(p + i)) no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.
Requisitos de Execução:
- Percorrer vetor utilizando incremento de ponteiro
p++sem usar operadores de indexação[].
Resultado Esperado
Vetor percorrido com deslocamento aritmético de ponteiro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_1_SeuNome - Envie na tarefa:
Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int main(void) {
int arr[4] = {100, 200, 300, 400};
int *p = arr;
for (int i = 0; i < 4; i++) {
printf("Elemento %d: %d (Endereco: %p)\n", i, *(p + i), (void*)(p + i));
}
return 0;
}
🔍 Nível 2: Prática
Problema 14.2 — Ponteiros Duplos (Ponteiro para Ponteiro - int **)
Contexto: Ponteiros Duplos (Ponteiro para Ponteiro - int **) no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.
Requisitos de Execução:
- Modificar o endereço apontado por um ponteiro passando
int **ptrpara uma função auxiliar.
Resultado Esperado
Endereço do ponteiro modificado com sucesso pela função.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_2_SeuNome - Envie na tarefa:
Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
void redefinir_alvo(int **ptr, int *novo_alvo) {
*ptr = novo_alvo;
}
int main(void) {
int a = 10, b = 20;
int *p = &a;
redefinir_alvo(&p, &b);
printf("Ponteiro agora aponta para: %d\n", *p);
return 0;
}
⚡ Nível 3: Integração
Problema 14.3 — Ponteiros de Função (Function Pointers) como Callbacks
Contexto: Ponteiros de Função (Function Pointers) como Callbacks no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.
Requisitos de Execução:
- Criar função de transformação genérica
mapear(int arr[], int tam, int (*fn)(int))aplicando função a cada elemento.
Resultado Esperado
Callback de dobra de valores aplicado a cada elemento do vetor.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_3_SeuNome - Envie na tarefa:
Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int dobrar(int x) { return x * 2; }
void mapear(int arr[], int tam, int (*operacao)(int)) {
for (int i = 0; i < tam; i++) {
arr[i] = operacao(arr[i]);
}
}
int main(void) {
int v[3] = {1, 2, 3};
mapear(v, 3, dobrar);
printf("Valores mapeados: %d, %d, %d\n", v[0], v[1], v[2]);
return 0;
}
🏆 Nível 4: Desafio Corporativo
Problema 14.4 — Tabela de Despacho de Funções (Dispatch Table) para Protocolos
Contexto: Tabela de Despacho de Funções (Dispatch Table) para Protocolos no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.
Requisitos de Execução:
- Implementar array de ponteiros de funções para executar comandos de protocolo de rede sem if/else.
Resultado Esperado
Comando despachado em O(1) através da tabela de ponteiros de função.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_4_SeuNome - Envie na tarefa:
Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
typedef void (*ComandoHandler)(void);
void cmd_ping(void) { puts("PONG!"); }
void cmd_status(void) { puts("STATUS: OK"); }
int main(void) {
ComandoHandler tabela[2] = {cmd_ping, cmd_status};
int cmd_id = 0; // PING
tabela[cmd_id]();
return 0;
}