C++: Arrays Multidimensionais
Última atualização: 2026-08-26
Se um array unidimensional é como "uma fileira de caixas de correio", e quanto a representar dados tabulares (como planilhas Excel, tabuleiros de xadrez, matrizes)?
É aí que entram os arrays multidimensionais — arrays de arrays.
1. Arrays Bidimensionais
(1) 1.1 O Que É um Array Bidimensional?
Um array bidimensional é um "array de arrays" — cada elemento é, por si só, um array.
| Analogia do Mundo Real | Equivalente no Programa |
|---|---|
| Planilha Excel (linhas × colunas) | Array 2D |
| Tabuleiro de xadrez (8 × 8) | Array 2D |
| Matriz (3 × 3) | Array 2D |
(2) 1.2 Declarando um Array Bidimensional
Sintaxe:
▶ Exemplo 2: Exemplo de código (Dificuldade ⭐)
Type arrayName[Rows][Cols];
Saída:
(Saída do programa)
Exemplo:
int matrix[3][4]; // Array 2D de 3 linhas, 4 colunas
Layout de memória:
matrix[0][0] matrix[0][1] matrix[0][2] matrix[0][3] ← Linha 0
matrix[1][0] matrix[1][1] matrix[1][2] matrix[1][3] ← Linha 1
matrix[2][0] matrix[2][1] matrix[2][2] matrix[2][3] ← Linha 2
💡 Ponto-chave: Em um array 2D, o primeiro índice é a linha, o segundo índice é a coluna.
2. Inicializando um Array Bidimensional
(1) 2.1 Inicialização na Declaração
#include <iostream>
int main() {
// Método 1: Inicializar por linha
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// Método 2: Inicializar sequencialmente (não recomendado, legibilidade ruim)
int matrix2[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
return 0;
}
(2) 2.2 Inicialização Parcial
#include <iostream>
int main() {
int matrix[3][4] = {
{1, 2}, // Primeira linha: apenas os dois primeiros inicializados, resto vira 0
{5}, // Segunda linha: apenas o primeiro inicializado, resto vira 0
{} // Terceira linha: todos viram 0
};
return 0;
}
💡 Dica: Linhas ou colunas omitidas são automaticamente inicializadas com 0.
3. Acessando Elementos de um Array 2D
(1) 3.1 Lendo Elementos
#include <iostream>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
std::cout << "Linha 1, Col 1: " << matrix[0][0] << std::endl; // 1
std::cout << "Linha 2, Col 3: " << matrix[1][2] << std::endl; // 7
std::cout << "Linha 3, Col 4: " << matrix[2][3] << std::endl; // 12
return 0;
}
(2) 3.2 Modificando Elementos
#include <iostream>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
matrix[1][2] = 100; // Alterar linha 2, coluna 3 para 100
std::cout << "Elemento modificado: " << matrix[1][2] << std::endl; // 100
return 0;
}
4. Percorrendo um Array 2D
(1) 4.1 Usando Loops for Aninhados
#include <iostream>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// Loop externo: iterar sobre linhas
for (int i = 0; i < 3; i++) {
// Loop interno: iterar sobre colunas
for (int j = 0; j < 4; j++) {
std::cout << matrix[i][j] << "\t";
}
std::cout << std::endl; // Nova linha
}
return 0;
}
💡 Ponto-chave: O loop externo controla as linhas, o loop interno controla as colunas.
5. Prática: Adição de Matrizes
▶ Exemplo 1: Somando duas matrizes 3×3 (Dificuldade ⭐⭐)
#include <iostream>
int main() {
int A[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int B[3][3] = {
{9, 8, 7},
{6, 5, 4},
{3, 2, 1}
};
int C[3][3]; // Matriz resultado
// Adição de matrizes
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}
// Exibir resultado
std::cout << "Matrix C = A + B: " << std::endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
std::cout << C[i][j] << "\t";
}
std::cout << std::endl;
}
return 0;
}
Saída:
Matrix C = A + B:
10 10 10
10 10 10
10 10 10
6. Arrays Tridimensionais (Opcional)
(1) 6.1 O Que É um Array Tridimensional?
Um array tridimensional é um "array de arrays 2D".
| Analogia do Mundo Real | Equivalente no Programa |
|---|---|
| Múltiplas tabelas 2D empilhadas | Array 3D |
| Cubo (comprimento × largura × altura) | Array 3D |
(2) 6.2 Declaração e Acesso
#include <iostream>
int main() {
int cube[2][3][4]; // 2 camadas, 3 linhas, 4 colunas
// Inicializar
cube[0][1][2] = 5; // Camada 0, linha 1, coluna 2
cube[1][2][3] = 10; // Camada 1, linha 2, coluna 3
return 0;
}
💡 Dica: Arrays 3D são difíceis de visualizar e tipicamente são usados apenas em computação científica e gráficos. Em projetos reais, prefira std::vector (que aprenderemos mais tarde).
7. Erros Comuns
(1) 7.1 Trocar a Ordem dos Índices
Exemplo de erro:
#include <iostream>
int main() {
int matrix[3][4];
matrix[1][2] = 5; // ✅ Correto: linha 1, coluna 2
matrix[2][1] = 10; // ✅ Correto: linha 2, coluna 1
// ❌ Erro: linha e coluna trocadas
// Queria acessar linha 1, coluna 2, mas acessou linha 2, coluna 1
std::cout << matrix[2][1] << std::endl;
return 0;
}
(2) 7.2 Acesso Fora dos Limites
Exemplo de erro:
#include <iostream>
int main() {
int matrix[3][4];
matrix[3][0] = 5; // ❌ Fora dos limites! Índice máximo de linha é 2
matrix[0][4] = 10; // ❌ Fora dos limites! Índice máximo de coluna é 3
return 0;
}
💡 Dica: Para um array 2D matrix[m][n], os intervalos de índices são:
- Linhas:
0am-1 - Colunas:
0an-1
▶ Exemplo 3: Percorrendo um array 2D para calcular a soma (Dificuldade ⭐)
#include <iostream>
int main() {
int scores[3][4] = {
{85, 90, 78, 92},
{88, 76, 95, 80},
{70, 85, 88, 90}
};
int total = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
total += scores[i][j];
}
}
std::cout << "Total: " << total << std::endl;
std::cout << "Average: " << total / 12 << std::endl;
return 0;
}
Saída:
Total: 967
Average: 80
❓ Perguntas Frequentes
P: Como os arrays 2D são armazenados na memória? R: Os arrays 2D do C++ usam a ordem por linhas — todos os elementos da primeira linha são armazenados primeiro, depois a segunda linha, e assim por diante. > > Layout de memória do matrix[3][4]: > [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] ... [2][3] > P: Como passo um array 2D para uma função? R: Você precisa passar o nome do array, o número de linhas e o número de colunas. > > void printMatrix(int arr[4], int rows) { // O número de colunas deve ser especificado! > for (int i = 0; i < rows; i++) { > for (int j = 0; j < 4; j++) { > std::cout << arr[i][j] << "\t"; > } > std::cout << std::endl; > } > } > P: Arrays 2D podem ter tamanhos dinâmicos? R: Não com arrays regulares (o tamanho deve ser determinado em tempo de compilação).
Soluções:
- Use
std::vector<std::vector<int>>>` (recomendado, aprenderemos isso mais tarde)- Use alocação dinâmica de memória (aprenderemos ponteiros e
newmais tarde)
P: O que é mais importante sobre arrays multidimensionais? R: Entenda os conceitos centrais primeiro, depois reforce com exemplos práticos.
P: Como posso praticar arrays multidimensionais de forma eficiente? R: Comece com exemplos simples, aumente a dificuldade gradualmente e sempre teste seu código.
📖 Resumo
- Arrays 2D são "arrays de arrays", adequados para representar dados tabulares
- Declaração:
Type arrayName[Rows][Cols]; - Acesso:
arrayName[RowIndex][ColIndex] - Travessia: Use loops for aninhados (loop externo para linhas, interno para colunas)
- Arrays 2D do C++ são armazenados na ordem por linhas
- Ao passar um array 2D como parâmetro, o número de colunas deve ser especificado
📝 Exercícios
- Básico (Dificuldade ⭐): Declare um array 2D de 2×3, inicializado como:
1 2 3
4 5 6
Então exiba o array.
- Intermediário (Dificuldade ⭐⭐):
Escreva uma função
void transpose(int arr[3], int rows)que compute a transposta de uma matriz 3×3 (troque linhas e colunas).
Matriz original:
1 2 3
4 5 6
7 8 9
Transposta:
1 4 7
2 5 8
3 6 9
- Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente um jogo da velha:
- Use um array 2D de 3×3 para representar o tabuleiro
- Dois jogadores se alternam (um usa
X, o outro usaO) - Verifique se um jogador formou uma linha (horizontal, vertical ou diagonal)
- Arrays 2D: armazenamento por linhas, formato de declaração: Type arrayName[Row][Col]
- Loops for aninhados percorrem arrays 2D
- Casos de uso comuns para arrays multidimensionais: matrizes, tabelas, imagens
- O número de colunas deve ser especificado ao passar um array 2D como parâmetro de função
- Arrays 2D irregulares podem ser implementados usando arrays de ponteiros
8. 🚀 Próximos Passos
Agora que você aprendeu sobre arrays multidimensionais, a seguir estudaremos strings no estilo C (aula 18) — representando strings com arrays de caracteres e compreendendo os princípios subjacentes das strings do C++.