Forudsætning: Arrays i C
Et multidimensionelt array kan betegnes som et array af arrays, der gemmer homogene data i tabelform. Data i multidimensionelle arrays er generelt lagret i rækkefølge i hukommelsen.
Det generel form for deklaration af N-dimensionelle arrays er vist nedenfor.
Syntaks:
data_type array_name[size1][size2]....[sizeN];>
- datatype : Type data, der skal gemmes i arrayet.
- matrix_navn : Navn på arrayet.
- størrelse 1, størrelse 2, …, størrelse N : Størrelse af hver dimension.
Eksempler :
grænseflade vs abstrakt klasse
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Størrelse af multidimensionelle arrays:
Det samlede antal elementer, der kan lagres i et multidimensionelt array, kan beregnes ved at gange størrelsen af alle dimensionerne.
For eksempel:
- Arrayet int x[10][20] kan gemme i alt (10*20) = 200 elementer.
- Tilsvarende array int x[5][10][20] kan gemme i alt (5*10*20) = 1000 elementer.
For at få størrelsen af arrayet i bytes, multiplicerer vi størrelsen af et enkelt element med det samlede antal elementer i arrayet.
For eksempel:
- Størrelse af array int x[10][20] = 10 * 20 * 4 = 800 bytes. (hvor int = 4 bytes)
- Tilsvarende størrelse på int x[5][10][20] = 5 * 10 * 20 * 4 = 4000 bytes. (hvor int = 4 bytes)
De mest almindeligt anvendte former for det multidimensionelle array er:
- To dimensionelle array
- Tredimensionelt array
Todimensionelt array i C
EN todimensionelt array eller 2D-array i C er den enkleste form for den multidimensionelle matrix. Vi kan visualisere et todimensionelt array som et array af endimensionelle arrays arrangeret over hinanden og danner en tabel med 'x' rækker og 'y' kolonner, hvor rækkenummeret går fra 0 til (x-1) og kolonnenummeret går fra 0 til (y-1).

Grafisk gengivelse af todimensionel array af størrelse 3 x 3
Erklæring om todimensionel array i C
Den grundlæggende form for at erklære et 2D-array med x rækker og og kolonner i C er vist nedenfor.
Syntaks:
data_type array_name[x][y];>
hvor,
- datatype: Type data, der skal lagres i hvert element.
- matrix_navn: arrayets navn
- x: Antal rækker.
- og: Antal kolonner.
Vi kan erklære en todimensional heltal matrix sige 'x' med 10 rækker og 20 kolonner som:
Eksempel:
int x[10][20];>
Bemærk: I denne type deklaration er arrayet tildelt hukommelse i stakken, og størrelsen af arrayet bør være kendt på kompileringstidspunktet, dvs. størrelsen af arrayet er fast. Vi kan også skabe et array dynamisk i C ved at bruge de nævnte metoder her.
Initialisering af todimensionelle arrays i C
De forskellige måder, hvorpå et 2D-array kan initialiseres, er som følger:
- Brug af initialiseringsliste
- Brug af loops
1. Initialisering af 2D-array ved hjælp af Initializer List
Vi kan initialisere et 2D-array i C ved at bruge en initialiseringsliste som vist i eksemplet nedenfor.
Første metode:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}> Ovenstående array har 3 rækker og 4 kolonner. Elementerne i bøjlerne fra venstre mod højre er gemt i tabellen også fra venstre mod højre. Elementerne vil blive udfyldt i arrayet i rækkefølge: de første 4 elementer fra venstre vil blive udfyldt i den første række, de næste 4 elementer i den anden række, og så videre.
Anden metode (bedre) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};> Denne type initialisering gør brug af indlejrede klammeparenteser. Hvert sæt indvendige seler repræsenterer en række. I ovenstående eksempel er der i alt tre rækker, så der er tre sæt indvendige seler. Fordelen ved denne metode er, at den er lettere at forstå.
Bemærk: Antallet af elementer i initialiseringslisten skal altid være mindre end eller lig med det samlede antal elementer i arrayet.
Vi kan også erklære arrayet uden at definere rækkens størrelse, hvis vi bruger listeinitialisering. Compileren vil automatisk udlede størrelsen af arrayet i dette tilfælde:
data_type array_name[][y] = {...} ;> Det er stadig obligatorisk at definere antallet af kolonner.
2. Initialisering af 2D-array ved hjælp af Loops
Vi kan bruge en hvilken som helst C-løkke til at initialisere hvert medlem af et 2D-array én efter én som vist i nedenstående eksempel.
Eksempel:
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }> Denne metode er nyttig, når værdierne af hvert element har en sekventiel relation.
Adgang til elementer af todimensionelle arrays i C
Elementer i 2D-arrays tilgås ved hjælp af rækkeindekser og kolonneindekser. Hvert element i et 2D-array kan henvises til ved:
Syntaks:
array_name[i][j]>
hvor,
- jeg: Rækkeindekset.
- j: Kolonneindekset.
Eksempel:
int x[2][1];>
Ovenstående eksempel repræsenterer elementet i den tredje række og anden kolonne.
omdøbe en mappe linux
Bemærk : I arrays, hvis størrelsen af en array er N. Dens indeks vil være fra 0 til N-1. For rækkeindeks 2 er rækkenummeret derfor 2+1 = 3. For at udlæse alle elementerne i et todimensionelt array kan vi bruge indlejret for sløjfer. Vi vil kræve to til ’ sløjfer. En til at krydse rækkerne og en anden til at krydse kolonner.
Til udskrivning af hele arrayet får vi adgang til hvert element et efter et ved hjælp af loops. Gennemgangens rækkefølge kan være række-hovedrækkefølge eller kolonne-hovedrækkefølge afhængigt af kravet. Nedenstående eksempel demonstrerer række-major-gennemgangen af et 2D-array.
Eksempel:
C
// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d
'>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009> |
>
>Produktion
Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>
Tidskompleksitet: O(N*M) , hvor N(here 3) og M(here 2) er antal af henholdsvis rækker og kolonner.
Rumkompleksitet:O(1)
Hvordan lagres 2D-arrays i hukommelsen?
Elementerne i 2-D-arrayet skal lagres sammenhængende i hukommelsen. Da computerne har lineære hukommelsesadresser, skal 2-D-arrays lineariseres for at muliggøre deres lagring. Der er to måder at opnå linearisering af array-elementer på:
- Række-major- Lineariseringsteknikken lagrer først den første række i arrayet, derefter den anden række i arrayet, så den tredje række og så videre. (dvs. elementer gemmes rækkevis. Rækker er listet på basis af kolonner)
- Søjle-major – Denne lineariseringsteknik gemmer først den første kolonne, derefter den anden kolonne, derefter den tredje kolonne, og så videre, dvs. (elementer gemmes kolonnevis. Kolonner er listet på basis af rækker)
Computeren holder ikke styr på adresserne på alle elementerne i arrayet, men holder styr på basisadressen (startadressen på det allerførste element) og beregner adresserne på elementerne, når det kræves.
For at vide mere, se artiklen - Beregning af adresse på element af 1-D, 2-D og 3-D
Tredimensionelt array i C
EN Tredimensionelt array eller 3D array i C er en samling af todimensionelle arrays. Det kan visualiseres som flere 2D-arrays stablet oven på hinanden.

Grafisk gengivelse af tredimensionel matrix af størrelse 3 x 3 x 3
Erklæring om tredimensionel array i C
Vi kan erklære et 3D-array med x 2D-arrays, der hver har og rækker og Med kolonner ved hjælp af syntaksen vist nedenfor.
Syntaks:
data_type array_name[x][y][z];>
- datatype: Type data, der skal lagres i hvert element.
- matrix_navn: arrayets navn
- x: Antal 2D-arrays.
- og: Antal rækker i hvert 2D-array.
- Med: Antal kolonner i hvert 2D-array.
Eksempel:
int array[3][3][3];>
Initialisering af tredimensionel array i C
Initialisering i et 3D-array er det samme som for 2D-arrays. Forskellen er, at antallet af dimensioner stiger, så antallet af indlejrede seler vil også stige.
Et 3D-array i C kan initialiseres ved at bruge:
- Initialiseringsliste
- Sløjfer
Initialisering af 3D Array ved hjælp af Initializer List
Metode 1 :
int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};> Metode 2 (bedre) :
int x[2][3][4] = { { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }, { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} } };> Igen, ligesom 2D-arrays, kan vi også erklære 3D-arrays uden at angive størrelsen af de første dimensioner, hvis vi bruger initialiseringsliste til initialisering. Compileren vil automatisk udlede størrelsen af den første dimension. Men vi mangler stadig at specificere resten af dimensionerne.
data_type array_name[][y][z] = {....};> Initialisering af 3D Array ved hjælp af Loops
Det ligner også det for 2D-array med en mere indlejret løkke for at få adgang til endnu en dimension.
int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }> Adgang til elementer i Three-Dimensional Array i C
Adgang til elementer i 3D-arrays svarer også til 2D-arrays. Forskellen er, at vi skal bruge tre sløjfer i stedet for to sløjfer for en ekstra dimension i 3D-arrays.
Syntaks:
array_name[x][y][z]>
hvor,
- x: Indeks af 2D-array.
- og: Indeks for den 2D-arrayrække.
- Med: Indeks for den 2D-array-kolonne.
C
// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d
'>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }> |
>
>
powershell vs bashProduktion
Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>
På lignende måder kan vi oprette arrays med et vilkårligt antal dimensioner. Kompleksiteten øges dog også i takt med at antallet af dimensioner øges. Det mest anvendte multidimensionelle array er Two-Dimensional Array.
Arrays er også tæt beslægtet med pointere i C-sprog. For at vide mere om forholdet mellem arrays og pointere i C, se det her artikel.