Arrays e Ponteiros em C

Arrays em C

Arrays são coleções de elementos do mesmo tipo, armazenados em sequência na memória.

Array Unidimensional

Vetor simples de elementos

int numeros[5] = {1, 2, 3, 4, 5};

Array Bidimensional

Matriz com linhas e colunas

int matriz[2][3] = { {1, 2, 3}, {4, 5, 6} };

Acesso aos Elementos

Usando índices

int primeiro = numeros[0]; int elemento = matriz[1][2];

Tamanho do Array

Definido na declaração

int tamanho = sizeof(numeros) / sizeof(int);

Ponteiros em C

Ponteiros são variáveis que armazenam endereços de memória de outras variáveis.

Declaração

Usando asterisco (*)

int* ptr; int valor = 10; ptr = &valor;

Dereferenciamento

Acessando o valor apontado

int valor = *ptr; *ptr = 20; // Modifica o valor

Aritmética

Navegando na memória

ptr++; // Próximo elemento ptr--; // Elemento anterior

Arrays e Ponteiros

Relação próxima

int* p = numeros; // Array decai para ponteiro int primeiro = *p; // Primeiro elemento

Regras Importantes:

  • Arrays começam no índice 0
  • Ponteiros não inicializados apontam para lugar indefinido
  • Sempre inicialize ponteiros antes de usar
  • Cuidado com acesso fora dos limites do array
  • Arrays são passados como ponteiros para funções

Exemplos Práticos:

// Trabalhando com Arrays
int numeros[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++) {
    printf("%d ", numeros[i]);
}

// Trabalhando com Ponteiros
int x = 10;
int* ptr = &x;
printf("Valor: %d\n", *ptr);
printf("Endereço: %p\n", (void*)ptr);

// Arrays e Ponteiros juntos
int* p = numeros;
for(int i = 0; i < 5; i++) {
    printf("%d ", *(p + i));
}

Dica: Arrays e ponteiros têm uma relação muito próxima em C. Quando você passa um array para uma função, na verdade está passando um ponteiro para seu primeiro elemento!