Fácil Rust

Box simples

Enunciado

Crie um Box<i32> com o valor 10 e imprima o valor desreferenciado. Depois, modifique o valor para 20 e imprima novamente.

Requisitos

  • Use Box::new para criar o valor.
  • Use * para desreferenciar e modificar.
  • Imprima o valor antes e depois da modificação.

Código inicial

fn main() {
    // seu código aqui
}

Saída esperada

Valor inicial: 10
Valor modificado: 20
Ver dica

Para modificar o valor dentro do Box, use *minha_box = novo_valor.

Mostrar solução
fn main() {
    // Cria um Box com valor 10
    let mut numero = Box::new(10);
    println!("Valor inicial: {}", *numero);

    // Modifica o valor dentro do Box
    *numero = 20;
    println!("Valor modificado: {}", *numero);
}

Passo a passo

  1. Box::new(10) aloca um inteiro no heap e retorna um Box<i32>.
  2. println! usa *numero para acessar o valor dentro do Box (desreferência).
  3. *numero = 20 altera o valor no heap através do ponteiro.
  4. O Box é liberado automaticamente ao final do escopo.

Por que funciona

O Box é um ponteiro inteligente que possui o valor no heap. A desreferência (*) permite acessar e modificar o valor como se fosse uma variável normal. A mutabilidade do binding (mut numero) permite alterar o conteúdo.

Erros comuns

  • Esquecer mut no binding: let numero = Box::new(10); *numero = 20; gera erro de compilação.
  • Tentar modificar sem desreferenciar: numero = Box::new(20); não altera o valor interno, apenas move o Box.
  • Usar numero sem * em contextos que exigem o valor: let x = numero + 1; não compila; use *numero + 1.

Outra forma de resolver

Usar Box::new e depois .as_mut() para obter uma referência mutável:

let mut numero = Box::new(10);
*numero.as_mut() = 20;

Mas a desreferência direta é mais idiomática.

Saída esperada

Valor inicial: 10
Valor modificado: 20