Priekšnosacījums: Masīvi C
Daudzdimensiju masīvu var saukt par masīvu masīvu, kurā tiek glabāti viendabīgi dati tabulas veidā. Dati daudzdimensiju masīvos parasti tiek saglabāti atmiņā rindu galvenajā secībā.
The N-dimensiju masīvu deklarēšanas vispārīgā forma ir parādīts zemāk.
Sintakse:
data_type array_name[size1][size2]....[sizeN];>
- datu tips : masīvā saglabājamo datu veids.
- masīva_nosaukums : masīva nosaukums.
- izmērs1, izmērs2,…, izmērsN : katras dimensijas lielums.
Piemēri :
cik miljonu ir miljardā
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Daudzdimensiju masīvu lielums:
Kopējo elementu skaitu, ko var saglabāt daudzdimensiju masīvā, var aprēķināt, reizinot visu izmēru izmērus.
Piemēram:
- Masīvs int x[10][20] var uzglabāt kopā (10*20) = 200 elementi.
- Līdzīgi masīvs int x[5][10][20] var uzglabāt kopā (5*10*20) = 1000 elementu.
Lai iegūtu masīva lielumu baitos, mēs reizinām viena elementa lielumu ar kopējo elementu skaitu masīvā.
Piemēram:
- Masīva lielums int x[10][20] = 10 * 20 * 4 = 800 baiti. (kur int = 4 baiti)
- Tāpat izmērs int x[5][10][20] = 5 * 10 * 20 * 4 = 4000 baiti. (kur int = 4 baiti)
Visbiežāk izmantotās daudzdimensiju masīva formas ir:
- Divdimensiju masīvs
- Trīsdimensiju masīvs
Divdimensiju masīvs C
A divdimensiju masīvs vai 2D masīvs in C ir vienkāršākā daudzdimensiju masīva forma. Mēs varam vizualizēt divdimensiju masīvu kā viendimensiju masīvu masīvu, kas sakārtoti viens virs otra, veidojot tabulu ar “x” rindām un “y” kolonnām, kur rindas numurs ir no 0 līdz (x-1) un kolonnas numurs. svārstās no 0 līdz (y-1).

3 x 3 izmēra divdimensiju masīva grafisks attēlojums
Divdimensiju masīva deklarācija C
2D masīva deklarēšanas pamatforma ar x rindas un un C kolonnas ir parādītas zemāk.
Sintakse:
data_type array_name[x][y];>
kur,
- datu tips: Katrā elementā glabājamo datu veids.
- masīva_nosaukums: masīva nosaukums
- x: Rindu skaits.
- un: Kolonnu skaits.
Divdimensiju veselu skaitļu masīvu varam paziņot “x” ar 10 rindām un 20 kolonnām kā:
Piemērs:
int x[10][20];>
Piezīme. Šāda veida deklarācijā masīvam tiek piešķirta atmiņa stekā, un masīva lielumam jābūt zināmam kompilēšanas laikā, t.i., masīva lielums ir fiksēts. Mēs varam arī dinamiski izveidot masīvu C valodā, izmantojot minētās metodes šeit.
Divdimensiju masīvu inicializācija C
Ir šādi dažādi veidi, kā inicializēt 2D masīvu:
- Inicializētāju saraksta izmantošana
- Izmantojot cilpas
1. 2D masīva inicializācija, izmantojot inicializatoru sarakstu
Mēs varam inicializēt 2D masīvu C valodā, izmantojot inicializētāju sarakstu, kā parādīts tālāk esošajā piemērā.
Pirmā metode:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}> Iepriekš minētajā masīvā ir 3 rindas un 4 kolonnas. Elementi iekavās no kreisās puses uz labo tiek saglabāti tabulā arī no kreisās puses uz labo. Elementi tiks aizpildīti masīvā secībā: pirmie 4 elementi no kreisās puses tiks aizpildīti pirmajā rindā, nākamie 4 elementi otrajā rindā un tā tālāk.
Otrā metode (labāka) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};> Šis inicializēšanas veids izmanto ligzdotās breketes. Katrs iekšējo breketu komplekts apzīmē vienu rindu. Iepriekš minētajā piemērā kopumā ir trīs rindas, tāpēc ir trīs iekšējo lencēšu komplekti. Šīs metodes priekšrocība ir tā, ka to ir vieglāk saprast.
Piezīme. Elementu skaitam inicializētāju sarakstā vienmēr jābūt mazākam vai vienādam ar kopējo elementu skaitu masīvā.
Mēs varam arī deklarēt masīvu, nedefinējot rindas lielumu, ja mēs izmantojam saraksta inicializēšanu. Šādā gadījumā kompilators automātiski secinās masīva lielumu:
data_type array_name[][y] = {...} ;> Joprojām ir obligāti jādefinē kolonnu skaits.
2. 2D masīva inicializācija, izmantojot cilpas
Mēs varam izmantot jebkuru C cilpu, lai inicializētu katru 2D masīva locekli pa vienam, kā parādīts zemāk esošajā piemērā.
Piemērs:
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }> Šī metode ir noderīga, ja katra elementa vērtībām ir kāda secīga sakarība.
Piekļuve divdimensiju masīvu elementiem programmā C
Elementiem 2D masīvos var piekļūt, izmantojot rindu indeksus un kolonnu indeksus. Uz katru elementu 2D masīvā var atsaukties šādi:
Sintakse:
array_name[i][j]>
kur,
- es: Rindas indekss.
- j: Kolonnas rādītājs.
Piemērs:
int x[2][1];>
Iepriekš minētais piemērs attēlo trešajā rindā un otrajā kolonnā esošo elementu.
Piezīme : masīvos, ja masīva lielums ir N. Tā indekss būs no 0 līdz N-1. Tāpēc rindas indeksam 2 rindas numurs ir 2+1 = 3. Lai izvadītu visus divdimensiju masīva elementus, mēs varam izmantot ligzdotu cilpu. Mums būs nepieciešami divi priekš ‘cilpas. Viens, lai šķērsotu rindas un otrs, lai šķērsotu kolonnas.
Visa masīva drukāšanai mēs piekļūstam katram elementam pa vienam, izmantojot cilpas. Apmeklēšanas secība var būt rindas galvenā secība vai kolonnas galvenā secība atkarībā no prasības. Tālāk esošajā piemērā ir parādīta 2D masīva rindu galvenā šķērsošana.
Piemērs:
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> |
>
>Izvade
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>
Laika sarežģītība: O(N*M) , kur N (šeit 3) un M (šeit 2) ir attiecīgi rindu un kolonnu skaits.
Telpas sarežģītība: O(1)
kas ir css selektori
Kā 2D masīvi tiek saglabāti atmiņā?
Divdimensiju masīva elementi atmiņā ir jāsaglabā blakus. Tā kā datoriem ir lineāras atmiņas adreses, 2-D masīvi ir jālinearizē, lai nodrošinātu to uzglabāšanu. Ir divi veidi, kā panākt masīva elementu linearizāciju:
- Rindas galvenais- Linearizācijas paņēmiens vispirms saglabā masīva pirmo rindu, pēc tam otro masīva rindu, pēc tam trešo rindu un tā tālāk. (t.i., elementi tiek saglabāti pa rindām. Rindas tiek uzskaitītas, pamatojoties uz kolonnām)
- Kolonna-majors - Šis linearizācijas paņēmiens vispirms saglabā pirmo kolonnu, pēc tam otro kolonnu, pēc tam trešo kolonnu un tā tālāk, t.i. (elementi tiek saglabāti kolonnā. Kolonnas tiek uzskaitītas, pamatojoties uz rindām)
Dators neseko visu masīva elementu adresēm, bet seko bāzes adresei (pirmā elementa sākuma adresei) un, ja nepieciešams, aprēķina elementu adreses.
Lai uzzinātu vairāk, skatiet rakstu - 1-D, 2-D un 3-D elementa adreses aprēķins
Trīsdimensiju masīvs C
A Trīsdimensiju masīvs vai 3D masīvs C ir divdimensiju masīvu kolekcija. To var vizualizēt kā vairākus 2D masīvus, kas sakrauti viens virs otra.

Trīsdimensiju masīva grafiskais attēlojums ar izmēru 3 x 3 x 3
Trīsdimensiju masīva deklarācija C
Mēs varam deklarēt 3D masīvu ar x 2D masīvi katram ir un rindas un Ar kolonnas, izmantojot tālāk norādīto sintaksi.
Sintakse:
data_type array_name[x][y][z];>
- datu tips: Katrā elementā glabājamo datu veids.
- masīva_nosaukums: masīva nosaukums
- x: 2D masīvu skaits.
- un: Rindu skaits katrā 2D masīvā.
- Ar: Kolonnu skaits katrā 2D masīvā.
Piemērs:
int array[3][3][3];>
Trīsdimensiju masīva inicializācija C
Inicializācija 3D masīvā ir tāda pati kā 2D masīvā. Atšķirība ir tāda, ka, palielinoties izmēru skaitam, palielināsies arī ligzdoto lenču skaits.
3D masīvu formātā C var inicializēt, izmantojot:
- Inicializētāju saraksts
- Cilpas
3D masīva inicializācija, izmantojot inicializētāju sarakstu
1. metode :
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};> 2. metode (labāka) :
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} } };> Atkal, tāpat kā 2D masīvus, mēs varam arī deklarēt 3D masīvus, nenorādot pirmo izmēru lielumu, ja inicializēšanai izmantojam inicializatoru sarakstu. Kompilators automātiski secinās pirmās dimensijas lielumu. Bet mums joprojām ir jāprecizē pārējie izmēri.
data_type array_name[][y][z] = {....};> 3D masīva inicializācija, izmantojot cilpas
Tas ir arī līdzīgs 2D masīvam ar vēl vienu ligzdotu cilpu, lai piekļūtu vēl vienai dimensijai.
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); } } }> Piekļuve elementiem trīsdimensiju masīvā C
Piekļuve elementiem 3D masīvos ir arī līdzīga 2D masīvu piekļuvei. Atšķirība ir tāda, ka vienai papildu dimensijai 3D masīvos ir jāizmanto trīs cilpas, nevis divas cilpas.
Sintakse:
array_name[x][y][z]>
kur,
determinēti galīgie automāti
- x: 2D masīva indekss.
- un: Šīs 2D masīva rindas rādītājs.
- Ar: Šīs 2D masīva kolonnas indekss.
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);> }> |
>
>Izvade
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>
Līdzīgos veidos mēs varam izveidot masīvus ar jebkādu izmēru skaitu. Tomēr, palielinoties dimensiju skaitam, palielinās arī sarežģītība. Visbiežāk izmantotais daudzdimensiju masīvs ir divdimensiju masīvs.
Masīvi ir arī cieši saistīti ar rādītājiem C valodā. Lai uzzinātu vairāk par masīvu attiecībām ar rādītājiem C, skatiet šis rakstu.