🧩 Exercícios: Ponteiros, Endereçamento e Passagem por Valor vs Referência
Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 09.1 — Operadores de Endereço (&) e Desreferenciação (*)
Contexto: Operadores de Endereço (&) e Desreferenciação (*) no contexto de Ponteiros, Endereçamento e Passagem por Valor vs Referência.
Requisitos de Execução:
- Obter endereço de memória de variável e alterar seu valor através de ponteiro.
Resultado Esperado
Valor de variável mutado via desreferenciação de ponteiro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_1_SeuNome - Envie na tarefa:
Atividade Cap 09 - Ponteiros, Endereçamento e Passagem por Valor vs Referência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
x := 42
p := &x
fmt.Printf("Endereco: %p | Valor original: %d\n", p, *p)
*p = 100
fmt.Printf("Novo valor de x: %d\n", x)
}
🔍 Nível 2: Prática
Problema 09.2 — Passagem por Valor vs Ponteiro em Funções
Contexto: Passagem por Valor vs Ponteiro em Funções no contexto de Ponteiros, Endereçamento e Passagem por Valor vs Referência.
Requisitos de Execução:
- Demonstrar que funções em Go recebem cópias e como ponteiros permitem mutação na origem.
Resultado Esperado
Mutação persistida na variável original através de parâmetro ponteiro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_2_SeuNome - Envie na tarefa:
Atividade Cap 09 - Ponteiros, Endereçamento e Passagem por Valor vs Referência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func incrementar(val *int) {
*val += 1
}
func main() {
contador := 10
incrementar(&contador)
fmt.Printf("Contador incrementado: %d\n", contador)
}
⚡ Nível 3: Integração
Problema 09.3 — Alocação no Heap com a Função new()
Contexto: Alocação no Heap com a Função new() no contexto de Ponteiros, Endereçamento e Passagem por Valor vs Referência.
Requisitos de Execução:
- Alocar ponteiro para struct com
new(Cliente)e inicializar campos.
Resultado Esperado
Objeto alocado via new() inicializado com ponteiro válido.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_3_SeuNome - Envie na tarefa:
Atividade Cap 09 - Ponteiros, Endereçamento e Passagem por Valor vs Referência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
type Configuracao struct { Timeout int }
func main() {
cfg := new(Configuracao)
cfg.Timeout = 30
fmt.Printf("Config Timeout: %d segundos\n", cfg.Timeout)
}
🏆 Nível 4: Desafio Corporativo
Problema 09.4 — Escape Analysis do Compilador Go (go build -gcflags=’-m’)
Contexto: Escape Analysis do Compilador Go (go build -gcflags=’-m’) no contexto de Ponteiros, Endereçamento e Passagem por Valor vs Referência.
Requisitos de Execução:
- Demonstrar como o compilador decide se uma variável reside no Stack ou ‘escapa’ para o Heap.
Resultado Esperado
Análise de escape do compilador Go homologada.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_4_SeuNome - Envie na tarefa:
Atividade Cap 09 - Ponteiros, Endereçamento e Passagem por Valor vs Referência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func criarBuffer() *int {
x := 42 // Escapa para o Heap pois o endereco eh retornado
return &x
}
func main() {
p := criarBuffer()
fmt.Printf("Valor recuperado: %d\n", *p)
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |