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 comscanf("%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()eputs(): A funçãogets()lê uma linha inteira (incluindo espaços) até encontrar uma quebra de linha, substituindo-a pelo\0. A funçãoputs()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 defgets()). - Função
printf(): Permite maior controle de formatação e pode imprimir múltiplas strings, diferentemente doputs()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.