Elementos de Array - Ponteiros
Parte da seção Logic & Flow do Journey de C da Coddy — lição 8 de 63.
Agora que você entende como nomes de arrays funcionam como ponteiros, você pode usar esse conhecimento para acessar elementos de um array de uma maneira completamente diferente. Em vez de usar a notação de colchetes familiar como array[i], você pode usar notação de ponteiro para obter o mesmo resultado.
A principal percepção é que array[i] é exatamente equivalente a *(array + i). Quando você escreve array + i, você está dizendo ao C para mover i posições à frente a partir do início do array. O operador de desreferência * então obtém o valor naquele local.
int numbers[5] = {10, 20, 30, 40, 50};
// Estas duas linhas fazem exatamente a mesma coisa:
printf("%d", numbers[2]); // Imprime 30
printf("%d", *(numbers + 2)); // Também imprime 30Esta notação de ponteiro funciona porque C calcula automaticamente o endereço de memória correto com base no tamanho do tipo de dado. Quando você adiciona 2 a um ponteiro de array de inteiros, C avança 2 × sizeof(int) bytes, chegando exatamente no terceiro elemento.
Compreender essa equivalência oferece flexibilidade na forma como você trabalha com arrays e o prepara para técnicas de ponteiros mais avançadas que você encontrará à medida que continuar aprendendo C.
Desafio
FácilEscreva um programa em C que demonstre o acesso a elementos de um array usando notação de ponteiro em vez da indexação tradicional de array. Seu programa deve:
- Declarar um array de inteiros chamado
valuescom 6 elementos e inicializá-lo com os valores {5, 15, 25, 35, 45, 55} - Usar um loop for para iterar por todos os elementos do array
- Dentro do loop, usar a notação de ponteiro
*(values + i)para acessar cada elemento (não use a notação de colchetes comovalues[i]) - Imprimir cada elemento usando o método de acesso por notação de ponteiro
- Após o loop, demonstrar a equivalência imprimindo o terceiro elemento (índice 2) usando ambos os métodos:
- Primeiro usando notação de ponteiro:
*(values + 2) - Depois usando a notação tradicional de array:
values[2]
- Primeiro usando notação de ponteiro:
Sua saída deve exibir os resultados no seguinte formato:
Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25Este desafio testa sua compreensão da equivalência entre array[i] e *(array + i), demonstrando como a aritmética de ponteiros permite acessar elementos de um array usando cálculos de endereço de memória em vez da indexação tradicional.
Folha de consulta
Os elementos de um array podem ser acessados usando notação de ponteiro em vez de notação de colchetes. A expressão array[i] é equivalente a *(array + i).
Quando você escreve array + i, o C move i posições para frente a partir do início do array. O operador de desreferência * obtém o valor naquele local.
int numbers[5] = {10, 20, 30, 40, 50};
// Estas duas linhas fazem exatamente a mesma coisa:
printf("%d", numbers[2]); // Imprime 30
printf("%d", *(numbers + 2)); // Também imprime 30O C calcula automaticamente o endereço de memória correto com base no tamanho do tipo de dado. Adicionar 2 a um ponteiro de array de inteiros move para frente em 2 × sizeof(int) bytes.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Escreva seu código aqui
// Declare e inicialize o array 'values' com 6 elementos
// Use um loop for para imprimir cada elemento usando notação de ponteiro *(values + i)
// Após o loop, imprima o terceiro elemento usando tanto notação de ponteiro quanto de array
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