Menu
Coddy logo textTech

Usando Ponteiros em Funções

Parte da seção Fundamentos do Journey de GO da Coddy — lição 64 de 109.

Funções podem aceitar e modificar variáveis através de ponteiros. Isso permite que as funções alterem o valor original, não apenas uma cópia.

Crie uma função que modifica um valor através de um ponteiro:

func main() {
    number := 10
    fmt.Println("Before:", number)
    
    // Passa o endereço de number
    doubleValue(&number)
    
    fmt.Println("After:", number)
}

func doubleValue(num *int) {
    // Modifica o valor no endereço do ponteiro
    *num = *num * 2
}

A saída mostra o valor alterado pela função:

Before: 10
After: 20

Quando passamos &number, a função recebe um ponteiro e pode modificar a variável original.

challenge icon

Desafio

Iniciante

Neste desafio, você praticará o uso de ponteiros em funções. Você precisa completar uma função que recebe um ponteiro para uma string e modifica o valor da string para ser maiúsculo.

A função makeUppercase já está definida para você. Sua tarefa é modificar a string para a qual o ponteiro aponta usando a função strings.ToUpper().

Folha de consulta

As funções podem modificar variáveis por meio de ponteiros, recebendo o endereço de memória em vez de uma cópia:

func main() {
    number := 10
    
    // Passa o endereço de number usando &
    doubleValue(&number)
    
    fmt.Println(number) // Saída: 20
}

func doubleValue(num *int) {
    // Modifica o valor no endereço do ponteiro usando *
    *num = *num * 2
}

Sintaxe principal de ponteiros:

  • &variable - obtém o endereço de uma variável
  • *pointer - desreferencia um ponteiro para acessar/modificar o valor
  • *type - declara um tipo de parâmetro de ponteiro

Experimente você mesmo

package main

import (
	"fmt"
	"strings"
)

// makeUppercase recebe um ponteiro para uma string e altera a string para letras maiúsculas
func makeUppercase(strPtr *string) {
	// TODO: Use strings.ToUpper() para alterar a string para a qual strPtr aponta
	// Dica: Você precisa desreferenciar o ponteiro para acessar o valor da string
	? = strings.ToUpper(?)
	
}

func main() {
	// Já temos uma variável de string
	message := "hello, world"
	
	// Imprime a mensagem original
	fmt.Printf("Original message: %s\n", message)
	
	// Chama makeUppercase com o endereço de message
	makeUppercase(&message)
	
	// Imprime a mensagem modificada
	fmt.Printf("Modified message: %s\n", message)
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos