O Operador de Desreferência (*)
Parte da seção Logic & Flow do Journey de C da Coddy — lição 4 de 63.
Agora que você sabe como armazenar endereços em ponteiros, você precisa aprender como acessar o valor real armazenado naquele endereço de memória. O operador de desreferência (*) permite que você "siga" o ponteiro para obter o valor para o qual ele aponta.
Quando você coloca o operador * na frente de uma variável de ponteiro, ele acessa o valor armazenado no endereço de memória que o ponteiro está guardando. Pense nisso como dizer "dê-me o que está dentro da sala neste endereço".
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Imprime 25 - o valor de ageÉ importante entender que o asterisco (*) tem dois significados diferentes em C. Ao declarar um ponteiro como int *ptr;, o asterisco indica que ptr é um ponteiro. Quando usado com um ponteiro existente como *ptr, ele desreferencia o ponteiro para acessar o valor para o qual ele aponta.
O operador de desreferência é essencial porque completa o ciclo do ponteiro: você pode armazenar um endereço em um ponteiro com &, e então recuperar o valor naquele endereço com *. Isso permite que você acesse e modifique variáveis indiretamente através de seus endereços de memória.
Desafio
FácilEscreva um programa em C que demonstre o fluxo de trabalho completo de ponteiros: declaração, atribuição de endereço e desreferenciação. Seu programa deve:
- Declarar uma variável inteira chamada
valuee inicializá-la com o valor 75 - Declarar uma variável float chamada
pricee inicializá-la com o valor 19.99 - Declarar um ponteiro para um inteiro chamado
value_ptr - Declarar um ponteiro para um float chamado
price_ptr - Usar o operador de endereço para atribuir o endereço de
valueavalue_ptr - Usar o operador de endereço para atribuir o endereço de
priceaprice_ptr - Usar o operador de desreferenciação para imprimir o valor de
valueatravés devalue_ptr - Usar o operador de desreferenciação para imprimir o valor de
priceatravés deprice_ptrcom exatamente 2 casas decimais
Sua saída deve exibir os valores desreferenciados no seguinte formato:
Value through pointer: 75
Price through pointer: 19.99O desafio testa sua compreensão de como o operador de desreferenciação recupera o valor da variável original seguindo o endereço armazenado no ponteiro.
Folha de consulta
O operador de desreferência (*) permite que você acesse o valor armazenado no endereço de memória que um ponteiro está guardando.
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Imprime 25 - o valor de ageO asterisco (*) tem dois significados diferentes em C:
- Em declarações como
int *ptr;- indica queptré um ponteiro - Com ponteiros existentes como
*ptr- desreferencia o ponteiro para acessar o valor para o qual ele aponta
O operador de desreferência completa o ciclo do ponteiro: armazene um endereço com &, depois recupere o valor nesse endereço com *.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Escreva seu código aqui
// 1. Declare e inicialize as variáveis
// 2. Declare os ponteiros
// 3. Atribua endereços aos ponteiros
// 4. Imprima os valores desreferenciados
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato