Menu
Coddy logo textTech

Nomes de Arrays como Ponteiros

Parte da seção Logic & Flow do Journey de C da Coddy — lição 7 de 63.

Arrays e ponteiros em C têm uma relação especial que é fundamental para entender como o C trabalha com dados na memória. Quando você declara um array, o próprio nome do array atua como um ponteiro constante para o primeiro elemento do array.

Isso significa que quando você tem um array como int numbers[5];, o nome numbers é essencialmente um ponteiro que sempre aponta para numbers[0]. Você pode pensar no nome do array como um ponteiro embutido que você não precisa declarar separadamente.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' aponta para o primeiro elemento
// numbers == &numbers[0]  // Estes são equivalentes!

Esta equivalência é crucial: numbers e &numbers[0] ambos fornecem exatamente o mesmo endereço de memória. O nome do array é apenas uma maneira mais conveniente de se referir ao endereço do primeiro elemento sem ter que usar o operador de endereço.

Compreender essa relação abre as portas para o uso de técnicas de ponteiros com arrays, o que pode tornar seu código mais flexível e eficiente. A principal diferença é que, ao contrário dos ponteiros comuns, os nomes de arrays são ponteiros constantes - você não pode alterar para o que eles apontam.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre a equivalência entre nomes de arrays e ponteiros para seus primeiros elementos. Seu programa deve:

  1. Declarar um array de inteiros chamado numbers com 4 elementos e inicializá-lo com os valores {10, 20, 30, 40}
  2. Declarar um ponteiro para um inteiro chamado ptr
  3. Atribuir o nome do array numbers ao ponteiro ptr
  4. Imprimir o endereço armazenado em numbers usando printf com o especificador de formato %p
  5. Imprimir o endereço do primeiro elemento &numbers[0] usando printf com o especificador de formato %p
  6. Imprimir o endereço armazenado em ptr usando printf com o especificador de formato %p
  7. Imprimir o valor do primeiro elemento usando o nome do array: *numbers
  8. Imprimir o valor do primeiro elemento usando o ponteiro: *ptr

Sua saída deve exibir os resultados no seguinte formato:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Este desafio demonstra que o nome do array atua como um ponteiro constante para o primeiro elemento, e que numbers, &numbers[0] e ptr contêm o mesmo endereço de memória quando ptr recebe o nome do array.

Folha de consulta

Nomes de arrays em C agem como ponteiros constantes para o primeiro elemento do array.

Quando você declara um array, o nome do array aponta para o primeiro elemento:

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' aponta para o primeiro elemento
// numbers == &numbers[0]  // Estes são equivalentes!

Você pode atribuir um nome de array a um ponteiro:

int *ptr;
ptr = numbers;  // ptr agora aponta para o primeiro elemento

Acesse valores usando a notação de ponteiro:

*numbers  // Valor do primeiro elemento via nome do array
*ptr      // Valor do primeiro elemento via ponteiro

Diferença fundamental: Nomes de arrays são ponteiros constantes - você não pode mudar para onde eles apontam, ao contrário de ponteiros comuns.

Experimente você mesmo

#include <stdio.h>

int main() {
    // TODO: Escreva seu código aqui
    // 1. Declare e inicialize o array 'numbers' com {10, 20, 30, 40}
    // 2. Declare um ponteiro para inteiro chamado 'ptr'
    // 3. Atribua o nome do array ao ponteiro
    // 4. Imprima todos os endereços e valores necessários
    
    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