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 ⭐)

TEXT 📖 Somente leitura
Type arrayName[Rows][Cols];

Saída:

TEXT 📖 Somente leitura
(Saída do programa)

Exemplo:

CPP
int matrix[3][4]; // Array 2D de 3 linhas, 4 colunas

Layout de memória:

TEXT 📖 Somente leitura
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

CPP
#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

CPP
#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

CPP
#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

CPP
#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

CPP
#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 ⭐⭐)

CPP
#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;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
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

CPP
#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:

CPP
#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:

CPP
#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:


▶ Exemplo 3: Percorrendo um array 2D para calcular a soma (Dificuldade ⭐)

CPP
#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;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
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:

  1. Use std::vector<std::vector<int>>>` (recomendado, aprenderemos isso mais tarde)
  2. Use alocação dinâmica de memória (aprenderemos ponteiros e new mais 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


📝 Exercícios

  1. Básico (Dificuldade ⭐): Declare um array 2D de 2×3, inicializado como:
TEXT 📖 Somente leitura
1 2 3
4 5 6

Então exiba o array.

  1. 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).
TEXT 📖 Somente leitura
Matriz original:
1 2 3
4 5 6
7 8 9

Transposta:
1 4 7
2 5 8
3 6 9
  1. Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente um jogo da velha:
  2. Use um array 2D de 3×3 para representar o tabuleiro
  3. Dois jogadores se alternam (um usa X, o outro usa O)
  4. Verifique se um jogador formou uma linha (horizontal, vertical ou diagonal)

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++.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%