Menu
Coddy logo textTech

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 30

Esta 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.

challenge icon

Desafio

Fácil

Escreva 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:

  1. Declarar um array de inteiros chamado values com 6 elementos e inicializá-lo com os valores {5, 15, 25, 35, 45, 55}
  2. Usar um loop for para iterar por todos os elementos do array
  3. Dentro do loop, usar a notação de ponteiro *(values + i) para acessar cada elemento (não use a notação de colchetes como values[i])
  4. Imprimir cada elemento usando o método de acesso por notação de ponteiro
  5. 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]

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: 25

Este 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 30

O 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;
}
quiz iconTeste seus conhecimentos

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