Introducción
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 una matriz 2D en C++
Entonces, ¿cómo inicializamos una matriz bidimensional en C++? Tan simple como esto:
int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;
Como puedes ver, inicializamos una matriz 2D arr
, con 4 filas y 2 columnas como un array de arrays. Cada elemento del array es a su vez un array de enteros.
También podemos inicializar una matriz 2D de la siguiente manera.
int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};
En este caso también, arr
es una matriz 2D con 4 filas y 2 columnas.
Imprimiendo una matriz 2D en C++
Hemos terminado de inicializar una matriz 2D, ahora sin imprimirla realmente, no podemos confirmar que se haya hecho correctamente.
Además, en muchos casos, es posible que necesitemos imprimir una matriz 2D resultante después de realizar algunas operaciones sobre ella. Entonces, ¿cómo lo hacemos?
El código a continuación nos muestra cómo podemos hacerlo.
#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;
}
}
Salida:

En el código anterior,
- Primero inicializamos una matriz 2D,
arr[4][2]
con ciertos valores, - Después, intentamos imprimir la matriz respectiva usando dos bucles for,
- el bucle externo itera sobre las filas, mientras que el interno itera sobre las columnas de la matriz 2D,
- Entonces, para cada iteración del bucle externo,
i
aumenta y nos lleva al siguiente arreglo 1D. Además, el bucle interno recorre todo el arreglo 1D a la vez, - Y en consecuencia, imprimimos el elemento individual
arr[ i ][ j ]
.
Tomando Elementos de Matriz 2D como Entrada de Usuario
Anteriormente, vimos cómo podemos inicializar una matriz 2D con valores predefinidos. Pero también podemos hacerlo con una entrada de usuario. Veamos cómo
#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;
}
}
Salida:

Para el código anterior, declaramos un arreglo 2D 2X2 s
. Usando dos bucles for anidados recorremos cada elemento del arreglo y tomamos las entradas de usuario correspondientes. De esta manera, toda la matriz se llena y la imprimimos para ver los resultados.
Adición de Matrices usando Arreglos Bidimensionales en C++
Como ejemplo, veamos cómo podemos usar matrices 2D para realizar la adición de matrices e imprimir el 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;
}
}
Salida:

Aquí,
- Tomamos dos matrices
m1
ym2
con un máximo de 5 filas y 5 columnas. Y otra matrizm3
en la que vamos a almacenar el resultado, - Como entradas de usuario, tomamos el número de filas y columnas para ambas matrices. Dado que estamos realizando la suma de matrices, el número de filas y columnas debe ser el mismo para ambas matrices,
- Después de eso, tomamos ambas matrices como entradas de usuario, nuevamente usando bucles anidados,
- En este punto, tenemos ambas matrices m1 y m2,
- entonces recorremos la matriz m3, usando dos bucles for y actualizamos los elementos respectivos
m3[i][j]
con el valor dem1[i][j]+m2[i][j]
. De esta manera, al final del bucle for externo, obtenemos nuestra matriz deseada, - Finalmente, imprimimos la matriz resultante m3.
Puntero a un arreglo 2D en C++
Si podemos tener un puntero a un entero, un puntero a un flotante, un puntero a un carácter, entonces ¿no podemos tener un puntero a un arreglo? Ciertamente podemos. El siguiente programa muestra cómo construirlo y usarlo.
#include<iostream>
using namespace std;
/* Uso de puntero a un arreglo */
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;
}
}
Salida:

Aquí,
- En el código anterior, intentamos imprimir una matriz 2D usando punteros,
- Como hicimos anteriormente, primero inicializamos la matriz 2D,
s[5][2]
. Y también un puntero(*p)[2]
, donde p es un puntero que almacena la dirección de una matriz con 2 elementos, - Como ya dijimos, podemos descomponer una matriz 2D como una matriz de matrices. Entonces, en este caso, s es en realidad una matriz con 5 elementos, que a su vez son en realidad matrices con 2 elementos para cada fila.
- Usamos un bucle
for
para recorrer estos 5 elementos de la matriz, s. Para cada iteración, asignamos p con la dirección des[i]
, - Además, el bucle interno imprime los elementos individuales de la matriz s[i] usando el puntero p. Aquí,
(*p + j)
nos da la dirección del elemento individual s[i][j], así que usando*(*p+j)
podemos acceder al valor correspondiente.
Pasando una matriz 2D a una función
En esta sección, vamos a aprender cómo pasar una matriz 2D a cualquier función y acceder a los elementos correspondientes. En el código a continuación, pasamos la matriz a a dos funciones show()
y print()
que imprimen la matriz 2D pasada.
#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;
}
Salida:

Aquí,
- En la función
show( )
hemos definido q como un puntero a un array de 4 enteros mediante la declaraciónint (*q)[4]
, - q holds the base address of the zeroth 1-D array
- Esta dirección se asigna a q, un puntero int, y luego usando este puntero se accede a todos los elementos del primer array unidimensional.
- La próxima vez que se ejecuta el bucle cuando
i
toma el valor 1, la expresión q+i obtiene la dirección del segundo array unidimensional. Esto se debe a que q es un puntero al primer array unidimensional y sumarle 1 nos daría la dirección del siguiente array unidimensional. Esta dirección se asigna nuevamente a q y usando esto se accede a todos los elementos del segundo array unidimensional. - En la segunda función
print()
, la declaración de q se ve así:int q[][4]
, - Esto es igual a int (*q)[4], donde q es un puntero a un array de 4 enteros. La única ventaja es que ahora podemos usar la expresión más familiar
q[i][j]
para acceder a los elementos del array. Podríamos haber usado la misma expresión enshow()
también, pero para comprender mejor el uso de punteros, utilizamos punteros para acceder a cada elemento.
Conclusión
En este artículo, discutimos arreglos bidimensionales en C++, cómo realizar diversas operaciones, así como su aplicación en la suma de matrices. Para cualquier pregunta adicional, no dudes en utilizar los comentarios.
Referencias
Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus