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++? É simples assim:
int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;
Então, 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 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++
Nós terminamos de inicializar 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. Então, 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,
- Inicialmente, inicializamos uma matriz 2D,
arr[4][2]
, com valores específicos. - Em seguida, tentamos imprimir a matriz correspondente usando dois loops for,
- o loop externo itera sobre as linhas, enquanto o interno itera sobre as colunas da matriz 2D,
- Portanto, 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, consequentemente, imprimimos o elemento individual
arr[ i ][ j ]
.
Tomando Elementos de uma Matriz 2D Como Entrada do Usuário
Anteriormente, vimos como podemos inicializar uma matriz 2D com valores predefinidos. Mas também podemos torná-la uma entrada do usuário. 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;
}
}
Saída:

Para o código acima, declaramos uma matriz 2D 2X2 s
. Usando dois loops for aninhados, percorremos cada elemento da matriz e pegamos as entradas do usuário correspondentes. Dessa forma, toda a matriz é preenchida e imprimimos o resultado para ver os resultados.
Adição de Matrizes usando Arrays Bidimensionais em C++
Como exemplo, vamos ver como podemos usar arrays 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 entradas do usuário, tomamos 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 entradas 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 for 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 ter um ponteiro para uma matriz? Certamente podemos. O programa a seguir mostra como construir 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, 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. Portanto, neste caso, s é na verdade uma matriz com 5 elementos, que são na verdade matrizes com 2 elementos para cada linha.
- Usamos um
for
loop para percorrer esses 5 elementos da matriz, s. Para cada iteração, atribuímos p com o endereço des[i]
, - Além disso, 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 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( )
, definimosq
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 depois, usando este ponteiro, acessamos todos os elementos do zeroésimo array 1D.
- Na próxima iteração do loop, quando
i
assume o valor 1, a expressão q+i busca o endereço do primeiro array 1D. Isso ocorre porque q é um ponteiro para o array 1D zeroésimo e adicionar 1 a ele nos dá o endereço do próximo array 1D. Este endereço é novamente atribuído a q e, usando-o, todos os elementos do próximo array 1D são acessados. - Na segunda função
print()
, a declaração de q é assim: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 uma melhor compreensão do uso de ponteiros, usamos ponteiros para acessar cada elemento.
Conclusão
Claro, 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 quaisquer perguntas adicionais, sinta-se à vontade para usar os comentários.
Referências
Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus