Inleiding
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.
Initialiseren van een 2D-array in C++
Dus, hoe initialiseren we een tweedimensionale array in C++? Zo eenvoudig als dit:
int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;
Zoals je kunt zien, initialiseren we een 2D-array arr
, met 4 rijen en 2 kolommen als een array van arrays. Elk element van de array is opnieuw een array van integers.
We kunnen ook een 2D array initialiseren op de volgende manier.
int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};
In dit geval is arr
ook een 2D-array met 4 rijen en 2 kolommen.
Printen van een 2D-array in C++
We hebben een 2D-array geïnitialiseerd, maar zonder deze daadwerkelijk af te drukken, kunnen we niet bevestigen dat dit correct is gebeurd.
Ook moeten we in veel gevallen een resulterende 2D-array afdrukken na het uitvoeren van enkele bewerkingen. Hoe doen we dat?
Onderstaande code laat zien hoe we dat kunnen doen.
#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;
}
}
Uitvoer:

In de bovenstaande code,
- We initialiseren eerst een 2D-array,
arr[4][2]
, met bepaalde waarden, - Daarna proberen we de respectieve array af te drukken met behulp van twee for-lussen,
- De buitenste for-lus doorloopt de rijen, terwijl de binnenste lus door de kolommen van de 2D-array loopt,
- Dus, voor elke iteratie van de buitenste lus, neemt
i
toe en brengt ons naar de volgende 1D-array. Ook doorloopt de binnenste lus de hele 1D-array per keer, - En dienovereenkomstig drukken we het individuele element
arr[ i ][ j ]
af.
2D-arrayelementen als invoer van de gebruiker nemen
Eerder zagen we hoe we een 2D-array met vooraf gedefinieerde waarden kunnen initialiseren. Maar we kunnen het ook als gebruikersinvoer maken. Laten we eens kijken hoe
#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;
}
}
Output:

Voor de bovenstaande code verklaren we een 2X2 2D-array s
. Met behulp van twee geneste for-lussen doorlopen we elk element van de array en nemen we de overeenkomstige gebruikersinvoer. Op deze manier wordt de hele array gevuld, en we drukken hetzelfde af om de resultaten te zien.
Matrixoptelling met tweedimensionale arrays in C++
Als voorbeeld kijken we hoe we 2D-arrays kunnen gebruiken om matrixoptelling uit te voeren en het resultaat af te drukken.
#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;
}
}
Output:

Hier,
- We nemen twee matrices
m1
enm2
met maximaal 5 rijen en 5 kolommen. En een andere matrixm3
waarin we het resultaat gaan opslaan, - Als gebruikersinvoer hebben we het aantal rijen en kolommen voor beide matrices genomen. Aangezien we matrixoptelling uitvoeren, moeten het aantal rijen en kolommen voor beide matrices gelijk zijn,
- Daarna nemen we beide matrices als gebruikersinvoer, opnieuw met behulp van geneste for-lussen,
- Op dit punt hebben we beide matrices m1 en m2,
- vervolgens lopen we door de m3-matrix, met behulp van twee for-lussen en werken we de respectieve elementen bij
m3[ i ][ j ]
met de waarde vanm1[i][j]+m2[i][j]
. Op deze manier krijgen we aan het einde van de buitenste for-lus onze gewenste matrix, - Tenslotte drukken we de resulterende matrix m3 af.
Pointer naar een 2D-array in C++
Als we een pointer naar een integer kunnen hebben, een pointer naar een float, een pointer naar een char, kunnen we dan niet ook een pointer naar een array hebben? Dat kunnen we zeker. Het volgende programma toont hoe je dit kunt bouwen en gebruiken.
#include<iostream>
using namespace std;
/* Gebruik van pointer naar een array */
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;
}
}
Output:

Hier,
- In de bovenstaande code proberen we een 2D-array af te drukken met behulp van pointers,
- Zoals we eerder hebben gedaan, initialiseren we eerst de 2D-array,
s[5][2]
. En ook een pointer(*p)[2]
, waar p een pointer is die het adres van een array met 2 elementen opslaat, - Zoals we al zeiden, kunnen we een 2D-array opbreken als een array van arrays. Dus in dit geval is s eigenlijk een array met 5 elementen, die verder eigenlijk arrays zijn met 2 elementen voor elke rij.
- We gebruiken een
for
-lus om over deze 5 elementen van de array s te gaan. Voor elke iteratie wijzen we p toe met het adres vans[i]
, - Verder drukt de innerlijke for-lus de afzonderlijke elementen van de array s[i] af met behulp van de pointer p. Hier geeft
(*p + j)
ons het adres van het afzonderlijke element s[i][j], dus met behulp van*(*p+j)
kunnen we de overeenkomstige waarde benaderen.
Het doorgeven van een 2D-array aan een functie
In dit gedeelte gaan we leren hoe we een 2D-array aan een willekeurige functie kunnen doorgeven en de overeenkomstige elementen kunnen benaderen. In de onderstaande code geven we de array a door aan twee functies show()
en print()
die de doorgegeven 2D-array afdrukken.
#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;
}
Uitvoer:

Hier,
- In de
show( )
-functie hebben we q gedefinieerd als een pointer naar een array van 4 integers via de declaratieint (*q)[4]
, - q holds the base address of the zeroth 1-D array
- Dit adres wordt vervolgens toegewezen aan q, een int-pointer, en vervolgens worden met behulp van deze pointer alle elementen van het nulde 1D-array benaderd.
- De volgende keer in de lus wanneer
i
de waarde 1 aanneemt, haalt de expressie q+i het adres van het eerste 1-D-array op. Dit komt doordat q een pointer is naar het nulde 1-D-array en er 1 aan toevoegen ons het adres van het volgende 1-D-array geeft. Dit adres wordt opnieuw toegewezen aan q en met behulp daarvan worden alle elementen van het volgende 1-D-array benaderd - In de tweede functie
print()
, ziet de declaratie van q er als volgt uit:int q[][4]
, - Dit is hetzelfde als int (*q )[4], waar q een pointer is naar een array van 4 integers. Het enige voordeel is dat we nu de meer vertrouwde expressie
q[i][j]
kunnen gebruiken om array-elementen te benaderen. We hadden dezelfde expressie ook inshow()
kunnen gebruiken, maar voor een beter begrip van het gebruik van pointers gebruiken we pointers om elk element te benaderen.
Conclusie
Dus, in dit artikel hebben we tweedimensionale arrays in C++ besproken, hoe we verschillende bewerkingen kunnen uitvoeren en de toepassing ervan in matrixoptelling. Voor verdere vragen kunt u gerust de opmerkingen gebruiken.
Referenties
Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus