Estrutura e Manipulação de Arrays na Linguagem C

Conceito e Estrutura de Arrays

Um array é uma estrutura de dados fundamental que agrupa variáveis do mesmo tipo em blocos de memória contíguos. O identificador do array representa o endereço base (um ponteiro constante) do primeiro elemento.


#include <stdio.h>

int main(void) {
    // Aloca 10 blocos de memória contíguos para inteiros, inicializados com zero
    int elementos[10] = {0}; 
    
    // elementos[0] é o primeiro, elementos[9] é o último
    return 0;
}

Na declaração, o tamanho do array deve ser uma constante ou expressão constante. Contudo, durante o acesso, o índice pode ser uma variável. A expressão elementos + n realiza aritmética de ponteiros, deslocando o endereço base em n posições de memória.

Arrays Unidimensionais

A sintaxe básica para declaração é tipo nome[tamanho];. O compilador reserva um espaço contíguo cujo tamanho total em bytes é calculado por sizeof(tipo) * tamanho.

  • Inicialização Total: Todos os elementos recebem valores específicos.
  • Inferência de Tamanho: Se todos os elementos forem inicializados, o tamanho pode ser omitido na declaração.
  • Iniciailzação Parcial: Elementos não explicitamente inicializados recebem zero (para tipos numéricos).

// O compilador infere o tamanho como 5
int primos[] = {2, 3, 5, 7, 11}; 

// Inicialização parcial: os primeiros 3 recebem valores, o restante vira 0
int dados[5] = {10, 20, 30}; 

Arrays Bidimensionais

Arrays multidimensionais, como os bidimensionais (matrizes), são declarados com tipo nome[linhas][colunas];. Na memória, os elementos são armazenados sequencialmente em ordem de linha (row-major order).

O cálculo do espaço total em bytes é linhas * colunas * sizeof(tipo).


// Matriz 2x3 inicializada por linhas
int matriz[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

Arrays de Caracteres e Manipulação de Strings

Em C, strings são representadas como arrays de caracteres termindaos pelo caractere nulo \0. Cada posição do array armazena exatamente um caractere.


// Array bidimensional de caracteres atuando como um array de strings
char nomes[3][10] = {"Ana", "Bruno", "Carlos"};

Entrada e Saída de Strings

A manipulação de texto pode ser feita caractere por caractere ou como uma string inteira.

  • Formato %c: Utilizado para ler ou imprimir um único caractere por vez.
  • Formato %s: Utilizado para operações com a string completa. A leitura com scanf("%s", array) interrmope a captura ao encontrar espaços, tabs ou quebras de linha. Como o nome do array já é um ponteiro para o endereço base, não se utiliza o operador &.
  • Funções gets() e puts(): A função gets() lê uma linha inteira (incluindo espaços) até encontrar uma quebra de linha, substituindo-a pelo \0. A função puts() imprime a string e adiciona automaticamente uma quebra de linha no final. (Nota técnica: gets() é considerada insegura em padrões modernos devido ao risco de buffer overflow, sendo preferível o uso de fgets()).
  • Função printf(): Permite maior controle de formatação e pode imprimir múltiplas strings, diferentemente do puts() que imprime apenas uma por chamada.

É crucial lembrar que a saída de uma string para em \0. Se o array contiver múltiplos caracteres nulos, a impressão cessará no primeiro deles encontrado.

Tags: c-linguagem Arrays ponteiros manipulacao-strings alocacao-memoria

Publicado em 6-23 07:08