Matrizes
Matrizes representam uma extensão natural dos vetores para duas dimensões, formando estruturas tabulares essenciais para computação numérica e processamento de dados multidimensionais.
Conceitos Fundamentais
- Estrutura de Armazenamento: Na memória, matrizes são armazenadas em ordem row-major (linhas consecutivas)
- Dimensões Fixas: Em C, o tamanho deve ser conhecido em tempo de compilação (para alocação estática)
- Tipos Homogêneos: Todos elementos devem ser do mesmo tipo (int, float, char, etc.)
Representação Matemática vs Implementação
Enquanto na matemática matrizes são representadas como Am×n, em C são declaradas como
tipo nome[linhas][colunas], com índices iniciando em 0.
Hierarquia de Acesso
- O compilador calcula o deslocamento de memória usando:
offset = (i * n_colunas) + j - Cada elemento ocupa
sizeof(tipo)bytes consecutivos - O acesso
matriz[i][j]é convertido para*(matriz + (i * n_colunas) + j)
Limitações e Considerações
- Alocação Contígua: Todas linhas são armazenadas sequencialmente na memória
- Overhead de Cálculo: Acesso a elementos requer cálculo de posição relativa
- Cache Efficiency: Iterar por linhas (row-major) é mais eficiente que por colunas
Casos Especiais
- Matrizes Triangulares: Podem ser otimizadas para armazenamento em vetor
- Matrizes Esparsas: Estruturas alternativas (listas ligadas) são mais eficientes
- Matrizes Dinâmicas: Requerem ponteiros para ponteiros e alocação individual de linhas