O Operador de Endereço (&)
Parte da seção Logic & Flow do Journey de C da Coddy — lição 3 de 63.
Agora que você sabe declarar ponteiros, você precisa aprender como realmente armazenar um endereço de memória neles. O operador de endereço (&) é a chave para obter o endereço de memória de qualquer variável.
Quando você coloca o operador & na frente de um nome de variável, ele retorna o endereço de memória onde essa variável está armazenada. Pense nisso como perguntar "Onde esta variável vive na memória?"
int age = 25;
int *ptr;
ptr = &age; // Armazena o endereço de 'age' em 'ptr'Neste exemplo, &age nos dá o endereço de memória da variável age. Em seguida, atribuímos este endereço ao nosso ponteiro ptr. Agora, ptr "aponta para" a variável age.
O operador de endereço (address-of) é essencial porque é a ponte entre variáveis comuns e ponteiros. Sem ele, você não poderia dizer a um ponteiro para qual variável apontar. Lembre-se de que os tipos de dados devem coincidir - você só pode atribuir o endereço de um inteiro a um ponteiro declarado para inteiros.
Desafio
FácilEscreva um programa em C que demonstre o uso do operador de endereço (address-of) para conectar variáveis com ponteiros. Seu programa deve:
- Declarar uma variável inteira chamada
numbere inicializá-la com o valor 42 - Declarar uma variável de caractere chamada
lettere inicializá-la com o valor 'X' - Declarar um ponteiro para um inteiro chamado
num_ptr - Declarar um ponteiro para um caractere chamado
char_ptr - Usar o operador de endereço para atribuir o endereço de
numberaonum_ptr - Usar o operador de endereço para atribuir o endereço de
letteraochar_ptr - Imprimir os endereços armazenados em ambos os ponteiros usando
printfcom o especificador de formato%p
Sua saída deve exibir os endereços dos ponteiros no seguinte formato:
Address of number: [address]
Address of letter: [address]Os endereços de memória reais variarão entre as execuções do programa, mas o formato e os rótulos devem corresponder exatamente como mostrado acima.
Folha de consulta
O operador de endereço (&) retorna o endereço de memória de uma variável:
int age = 25;
int *ptr;
ptr = &age; // Armazena o endereço de 'age' em 'ptr'O operador de endereço é essencial para conectar variáveis com ponteiros. Os tipos de dados devem corresponder - você só pode atribuir o endereço de um inteiro a um ponteiro declarado para inteiros.
Use o especificador de formato %p para imprimir endereços de ponteiro com printf.
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. Use o operador de endereço para atribuir endereços
// 4. Imprima os endereços usando o formato mostrado
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