Introdução
A two-dimensional array in C++ is the simplest form of a multi-dimensional array. It can be visualized as an array of arrays. The image below depicts a two-dimensional array.

A two-dimensional array is also called a matrix. It can be of any type like integer, character, float, etc. depending on the initialization. In the next section, we are going to discuss how we can initialize 2D arrays.
Inicializando um array 2D em C++
Então, como inicializamos um array bidimensional em C++? Tão simples quanto isso:
int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;
Como você pode ver, inicializamos um array 2D arr
, com 4 linhas e 2 colunas como um array de arrays. Cada elemento do array é, novamente, um array de números inteiros.
Também podemos inicializar um array 2D da seguinte maneira.
int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};
Neste caso também, arr
é um array 2D com 4 linhas e 2 colunas.
Imprimindo um array 2D em C++
Concluímos a inicialização de um array 2D, agora, sem realmente imprimir o mesmo, não podemos confirmar se foi feito corretamente.
Também, em muitos casos, podemos precisar imprimir um array 2D resultante após realizar algumas operações nele. Como fazemos isso?
O código abaixo nos mostra como podemos fazer isso.
#include<iostream>
using namespace std;
main( )
{
int arr[4][2] = {
{ 10, 11 },
{ 20, 21 },
{ 30, 31 },
{ 40, 41 }
} ;
int i,j;
cout<<"Printing a 2D Array:\n";
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
cout<<"\t"<<arr[i][j];
}
cout<<endl;
}
}
Saída:

No código acima,
- Nós inicialmente inicializamos uma matriz 2D,
arr[4][2]
com certos valores, - Depois disso, tentamos imprimir a matriz respectiva usando dois loops for,
- o loop externo itera sobre as linhas, enquanto o interno itera sobre as colunas da matriz 2D,
- Então, para cada iteração do loop externo,
i
aumenta e nos leva para o próximo array 1D. Além disso, o loop interno percorre todo o array 1D de uma vez, - E, de acordo com isso, imprimimos o elemento individual
arr[ i ][ j ]
.
Tomando Elementos da Matriz 2D Como Entrada do Usuário
Anteriormente, vimos como podemos inicializar uma matriz 2D com valores pré-definidos. Mas também podemos torná-la uma entrada do usuário também. Vamos ver como
#include<iostream>
using namespace std;
main( )
{
int s[2][2];
int i, j;
cout<<"\n2D Array Input:\n";
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
cout<<"\ns["<<i<<"]["<<j<<"]= ";
cin>>s[i][j];
}
}
cout<<"\nThe 2-D Array is:\n";
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
cout<<"\t"<<s[i][j];
}
cout<<endl;
}
}
Resultado:

Para o código acima, declaramos uma matriz 2D 2X2 s
. Usando dois loops for aninhados, percorremos cada elemento do array e recebemos as entradas do usuário correspondentes. Dessa forma, toda a matriz é preenchida e imprimimos a mesma para ver os resultados.
Adição de Matrizes usando Arrays Bidimensionais em C++
Como exemplo, vejamos como podemos usar matrizes 2D para realizar a adição de matrizes e imprimir o resultado.
#include<iostream>
using namespace std;
main()
{
int m1[5][5], m2[5][5], m3[5][5];
int i, j, r, c;
cout<<"Enter the no.of rows of the matrices to be added(max 5):";
cin>>r;
cout<<"Enter the no.of columns of the matrices to be added(max 5):";
cin>>c;
cout<<"\n1st Matrix Input:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\nmatrix1["<<i<<"]["<<j<<"]= ";
cin>>m1[i][j];
}
}
cout<<"\n2nd Matrix Input:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\nmatrix2["<<i<<"]["<<j<<"]= ";
cin>>m2[i][j];
}
}
cout<<"\nAdding Matrices...\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
m3[i][j]=m1[i][j]+m2[i][j];
}
}
cout<<"\nThe resultant Matrix is:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\t"<<m3[i][j];
}
cout<<endl;
}
}
Saída:

Aqui,
- Pegamos duas matrizes
m1
em2
com um máximo de 5 linhas e 5 colunas. E outra matrizm3
na qual vamos armazenar o resultado, - Como entrada do usuário, pegamos o número de linhas e colunas para ambas as matrizes. Como estamos realizando a adição de matrizes, o número de linhas e colunas deve ser o mesmo para ambas as matrizes,
- Depois disso, pegamos ambas as matrizes como entrada do usuário, novamente usando loops aninhados,
- Neste ponto, temos ambas as matrizes m1 e m2,
- então percorremos a matriz m3, usando dois loops e atualizamos os elementos respectivos
m3[i][j]
pelo valor dem1[i][j]+m2[i][j]
. Dessa forma, ao final do loop externo, obtemos nossa matriz desejada, - Por fim, imprimimos a matriz resultante m3.
Ponteiro para uma Matriz 2D em C++
Se podemos ter um ponteiro para um inteiro, um ponteiro para um float, um ponteiro para um char, então por que não poderíamos ter um ponteiro para uma matriz? Certamente podemos. O programa a seguir mostra como construí-lo e usá-lo.
#include<iostream>
using namespace std;
/* Uso de ponteiro para uma matriz */
main( )
{
int s[5][2] = {
{1, 2},
{1, 2},
{1, 2},
{1, 2}
} ;
int (*p)[2] ;
int i, j;
for (i = 0 ; i <= 3 ; i++)
{
p=&s[i];
cout<<"Row"<<i<<":";
for (j = 0; j <= 1; j++)
cout<<"\t"<<*(*p+j);
cout<<endl;
}
}
Saída:

Aqui,
- No código acima, tentamos imprimir uma matriz 2D usando ponteiros,
- Como fizemos anteriormente, primeiro inicializamos a matriz 2D,
s[5][2]
. E também um ponteiro(*p)[2]
, onde p é um ponteiro que armazena o endereço de uma matriz com 2 elementos, - Como já dissemos, podemos decompor uma matriz 2D como uma matriz de matrizes. Então, neste caso, s é na verdade uma matriz com 5 elementos, que são, na verdade, matrizes com 2 elementos para cada linha.
- Usamos um laço
for
para percorrer esses 5 elementos da matriz, s. Para cada iteração, atribuímos p com o endereço des[i]
, - Mais adiante, o loop interno imprime os elementos individuais da matriz s[i] usando o ponteiro p. Aqui,
(*p + j)
nos dá o endereço do elemento individual s[i][j], então usando*(*p+j)
podemos acessar o valor correspondente.
Passando uma Matriz 2D para uma Função
Nesta seção, vamos aprender como passar uma matriz 2D para qualquer função e acessar os elementos correspondentes. No código abaixo, passamos a matriz a para duas funções show()
e print()
que imprimem a matriz 2D passada.
#include<iostream>
using namespace std;
void show(int (*q)[4], int row, int col)
{
int i, j ;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<"\t"<<*(*(q + i)+j);
cout<<"\n";
}
cout<<"\n";
}
void print(int q[][4], int row, int col)
{
int i, j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<"\t"<<q[i][j];
cout<<"\n";
}
cout<<"\n";
}
int main()
{
int a[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ;
show (a, 3, 4);
print (a, 3, 4);
return 0;
}
Saída:

Aqui,
- No função
show()
nós definimos q como um ponteiro para um array de 4 inteiros através da declaraçãoint (*q)[4]
, - q holds the base address of the zeroth 1-D array
- Este endereço é então atribuído a q, um ponteiro int, e então usando este ponteiro todos os elementos do zeroésimo array 1D são acessados.
- Na próxima vez que o loop for executado e
i
assumir o valor 1, a expressão q+i busca o endereço do primeiro array 1-D. Isso ocorre porque q é um ponteiro para o array zeroésimo 1-D e adicionar 1 a ele nos daria o endereço do próximo array 1-D. Este endereço é novamente atribuído a q e usando-o todos os elementos do próximo array 1-D são acessados - Na segunda função
print()
, a declaração de q parece com isso:int q[][4]
, - Isso é o mesmo que int (*q )[4], onde q é um ponteiro para um array de 4 inteiros. A única vantagem é que agora podemos usar a expressão mais familiar
q[i][j]
para acessar os elementos do array. Poderíamos ter usado a mesma expressão emshow()
também, mas para melhor compreensão do uso de ponteiros, usamos ponteiros para acessar cada elemento.
Conclusão
Então, neste artigo, discutimos matrizes bidimensionais em C++, como podemos realizar várias operações, bem como sua aplicação na adição de matrizes. Para qualquer dúvida adicional, sinta-se à vontade para usar os comentários.
Referências
Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus