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 de ponteiro segue uma sintaxe específica que diz ao compilador para qual tipo de dado o ponteiro apontará.
A sintaxe básica para declarar um ponteiro é: 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 armazenará um endereço de memória, não o valor real do dado. Quando você declara int *ptr;, você está dizendo "ptr é um ponteiro que pode armazenar o endereço de uma variável inteira."
Observe que o tipo de dado antes do asterisco especifica para que tipo de dado o ponteiro 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 adequado da memória.
Desafio
FácilEscreva um programa em C que demonstre a sintaxe correta de declaração de ponteiros. Seu programa deve:
- Declarar um ponteiro para um inteiro chamado
int_ptr - Declarar um ponteiro para um caractere chamado
char_ptr - Declarar um ponteiro para um float chamado
float_ptr - Imprimir os endereços de memória armazenados em cada ponteiro usando
printfcom o especificador de formato%p
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 variam, mas o formato e os rótulos devem corresponder exatamente como mostrado acima.
Folha de consulta
Para declarar uma variável de ponteiro, use a sintaxe: 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 (*) torna esta uma declaração de ponteiro, informando ao compilador que esta variável armazenará um endereço de memória. O tipo de dado antes do asterisco especifica que tipo de dado o ponteiro apontará.
Use o especificador de formato %p com printf para exibir endereços de ponteiro.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Declare seus ponteiros aqui
// TODO: Imprima os endereços dos ponteiros usando o formato solicitado
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