Declarando Ponteiros
Parte da seção Logic & Flow do Journey de C da Coddy — lição 2 de 63.
Agora que você entende o que são ponteiros, vamos aprender como criá-los. Declarar uma variável ponteiro segue uma sintaxe específica que diz ao compilador para qual tipo de dado o ponteiro irá apontar.
A sintaxe básica para declarar um pointer é: data_type *pointer_name;
int *ptr; // Declara um ponteiro para um inteiro
char *ch_ptr; // Declara um ponteiro para um caractere
float *f_ptr; // Declara um ponteiro para um floatO asterisco (*) é o que torna esta uma declaração de ponteiro. Ele diz ao compilador que esta variável irá armazenar um endereço de memória, não o valor de dados real. Quando você declara int *ptr;, você está dizendo "ptr é um ponteiro que pode armazenar o endereço de uma variável inteira."
É uma boa prática inicializar ponteiros como NULL se eles ainda não estiverem apontando para um endereço de memória válido. Isso evita que eles apontem para locais de memória aleatórios: int *ptr = NULL;
Ao imprimir endereços de pointer usando printf, use o especificador de format %p. É frequentemente recomendado converter (cast) o pointer para (void *) para garantir compatibilidade e a formatação correta: printf("%p", (void *)ptr);
Observe que o tipo de dado antes do asterisco especifica que tipo de dado o ponteiro irá apontar. Isso é importante porque diferentes tipos de dados ocupam diferentes quantidades de espaço na memória, e o compilador precisa saber dessa informação para o gerenciamento correto da memória.
Desafio
Fácil- Declarar um ponteiro para um
intchamadoint_ptr, inicializado comNULL - Declarar um ponteiro para um
charchamadochar_ptr, inicializado comNULL - Declarar um ponteiro para um
floatchamadofloat_ptr, inicializado comNULL - Imprimir os endereços de memória armazenados em cada ponteiro usando
printfcom o especificador de formato%p. Ao imprimir, faça o cast do ponteiro para(void*)para garantir a formatação correta, por exemplo:printf("Label: %p\n", (void*)ptr);
Sua saída deve exibir os três endereços de ponteiro no seguinte formato:
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]Observe que os endereços de memória reais vão variar, mas o formato e os rótulos devem corresponder exatamente ao mostrado acima.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Declare seus ponteiros aqui
// TODO: Imprima os endereços dos ponteiros usando o formato necessário
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