Fácil C

Dobrar um valor com ponteiro

Enunciado

Escreva um programa que declare int numero = 7; e um ponteiro para ele. Use o ponteiro para dobrar o valor de numero e imprima o resultado.

Requisitos

  • Declarar int numero = 7; e um ponteiro int *p = №.
  • Usar *p para multiplicar o valor por 2.
  • Imprimir o valor final de numero com printf.

Código inicial

#include <stdio.h>

int main(void) {
    int numero = 7;
    /* crie o ponteiro e dobre o valor usando *p */
    return 0;
}

Saída esperada

numero = 14
Ver dica

O ponteiro deve receber &numero. Depois, *p = *p * 2; altera o valor original.

Mostrar solução
#include <stdio.h>

int main(void) {
    int numero = 7;
    int *p = &numero;   /* p aponta para numero */

    *p = *p * 2;        /* le e dobra o valor atraves do ponteiro */

    printf("numero = %d\n", numero);
    return 0;
}

Passo a passo

  1. int numero = 7; cria uma variável comum na pilha.
  2. int *p = &numero; guarda em p o endereço de numero; o & é obrigatório aqui.
  3. *p = *p * 2; lê o valor apontado (7), multiplica por 2 e grava 14 de volta no mesmo endereço.
  4. Como p aponta para numero, a alteração é visível em numero.
  5. printf imprime o valor atualizado.

Por que funciona

O ponteiro não copia o valor: ele referencia o mesmo espaço de memória. Ao escrever em *p, alteramos diretamente a variável original. Isso é o coração do conceito de ponteiro: acesso indireto à memória.

Erros comuns

  • Esquecer o &: int *p = numero; gera aviso/erro, pois numero é int, não endereço.
  • Esquecer o * na atribuição: p = p * 2; tenta multiplicar um endereço, o que não faz sentido.
  • Usar *p antes de inicializar p: ponteiro selvagem, comportamento indefinido.

Outra forma de resolver

Sem ponteiro explícito, mas usando o mesmo endereço:

numero = numero * 2;

É mais simples, porém não demonstra o acesso indireto.

Saída esperada

numero = 14