C programozás

2D tömb

2D tömb
A kétdimenziós (2D) tömb egydimenziós (1D) tömbök tömbje. Az 1D tömb méretei megegyeznek. A 2D tömböt mátrixnak is nevezzük sorokkal és oszlopokkal.

Lássuk a következő példát:

Ez a 3 1D tömb 2D tömbként ábrázolható az alábbiak szerint:

Lássunk egy másik példát:

Ez a 3 1D tömb nem képviselhet 2D tömbként, mert a tömbök méretei különbözőek.

A 2D tömb deklarációja

adattípus tömb-név[SOR] [COL]

int a [2] [3];

A fenti C kód használatával deklarálhatunk egy egész szám sor, a nagyságú 2 * 3 (2 sor és 3 oszlop).

char b [3] [2];

A fenti C kód használatával kijelenthetjük a karakter sor, b nagyságú 2 * 3 (3 sor és 2 oszlop).

2D tömb inicializálása

A nyilatkozat során a következő módszerekkel inicializálhatjuk:

  1. int a [3] [2] = 1,2,3,4,5,6;
  2. int a [] [2] = 1,2,3,4,5,6;
  3. int a [3] [2] = 1, 2, 3, 4, 5, 6;
  4. int a [] [2] = 1, 2, 3, 4, 5, 6;

Vegye figyelembe, hogy a 2. és a 4. részben nem említettük az 1-etutca alindex. A C fordító automatikusan kiszámítja a sorok számát az elemek számából. De a 2nd alindexet meg kell adni. A következő inicializálások érvénytelenek:

  1. int a [3] [] = 1,2,3,4,5,6;
  2. int a [] [] = 1,2,3,4,5,6;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Példa1.c
#include
#define 3. sor
#define COL 2
int main ()

int i, j;
int a [ROW] [COL] =
1,2,
3,4,
5,6
;
printf ("Az a tömb soros elemei: \ n");
mert (i = 0; i
printf ("% d sor:", i);
mert (j = 0; j
printf ("% d", a [i] [j]);

printf ("\ n");

printf ("\ n \ nAz oszlop bölcs elemei: \ n");
mert (i = 0; i
printf ("% d oszlop:", i);
mert (j = 0; j
printf ("% d", a [j] [i]);

printf ("\ n");

visszatér 0;

Az 1. példában.c, deklaráltunk egy 3 * 2 méretű egész tömböt és inicializáltuk. A tömb elemek eléréséhez kettőt használunk a hurokhoz.

A sorok szerinti eléréshez a külső hurok a soroké, a belső hurok pedig az oszlopoké.

Oszloponként történő eléréshez a külső hurok az oszlopoké, a belső hurok pedig a soroké.

Ne feledje, hogy amikor 2D tömböt deklarálunk, akkor egy [2] [3] szót használunk, ami 2 sort és 3 oszlopot jelent. A tömbindexelés 0-tól kezdődik. A 2 eléréséheznd sor és 3rd oszlopban az a [1] [2] jelölést kell használnunk.

2D tömb memória leképezése

Egy tömb logikai nézete a [3] [2] lehet a következő:

A számítógépes memória egy bájtos 1D-sorrend. C nyelven 2D tömb tár a memóriában sor-fő rend. Néhány más programozási nyelv (pl.g., FORTRAN), itt tárolja oszlop-fő rend a memóriában.

2D tömb mutatószámtana

A 2D tömb mutató-aritmetikájának megértéséhez először nézze meg az 1D tömböt.

Vegyünk egy 1D tömböt:

1D tömbben, a konstans, értéke pedig a 0 címeth a tömb helye a [5]. Értéke a + 1 az 1 címeutca a tömb helye a [5].  a + i a. címe énth a tömb helye.

Ha növekszünk a 1-gyel növekszik az adattípus méretével.

a [1] egyenértékű * (a + 1)

a [2] egyenértékű * (a + 2)

a [i] egyenértékű * (a + i)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 2. példa.c
#include
#define 3. sor
#define COL 2
int main ()

int a [5] = 10,20,30,40,50;
printf ("sizeof (int):% ld \ n \ n", sizeof (int));
printf ("a:% p \ n", a);
printf ("a + 1:% p \ n", a + 1);
printf ("a + 2:% p \ n \ n", a + 2);
printf ("a [1]:% d, * (a + 1):% d \ n", a [1], * (a + 1));
printf ("a [2]:% d, * (a + 2):% d \ n", a [1], * (a + 1));
printf ("a [3]:% d, * (a + 3):% d \ n", a [1], * (a + 1));
visszatér 0;

A 2. példában.c, a memória címe hexadecimálisan jelenik meg. Az a és a + 1 közötti különbség 4, amely egy bájtban lévő egész méret.

Vegyünk egy 2D tömböt:

b típusú mutató: int [] [4] vagy int (*) [4]

int [] [4] egy 4 egész sor. Ha b-vel növekszünk 1-gyel, akkor azt a sor mérete növeli.

b a. címe 0th sor.

b + 1 a. címe 1utca sor.

b + i a címe énth sor.

A sor mérete: (Oszlop száma * sizeof (adattípus)) bájt

A b [3] [4] egész tömb sorának mérete: 4 * (int) mérete = 4 * 4 = 16 bájt

A 2D tömb sora 1D tömbnek tekinthető. b a. címe 0th sor. Tehát a következőket kapjuk

B [i] [j] címe: b + sizeof (adattípus) * (oszlop száma * i + j)

Vegyünk egy 2D tömböt: int b [3] [4]

B [2] [1] címe: : b + méret (int) * (4 * 2 + 1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 3. példa.c
#include
#define 3. sor
#define COL 4
int main ()

int i, j;
int b [ROW] [COL] =
10,20,30,40,
50,60,70,80,
90,100,110,120
;
printf ("sizeof (int):% ld \ n", sizeof (int));
printf ("Egy sor mérete:% ld \ n", COL * sizeof (int));
printf ("b:% p \ n", b);
printf ("b + 1:% p \ n", b + 1);
printf ("b + 2:% p \ n", b + 2);
printf ("* b:% p \ n", * b);
printf ("* b + 1:% p \ n", * b + 1);
printf ("* b + 2:% p \ n", * b + 2);
printf ("b [0] [0]:% d ** b:% d \ n", b [0] [0], ** b);
printf ("b [0] [1]:% d * (* b + 1):% d \ n", b [0] [1], * (* b + 1));
printf ("b [0] [2]:% d * (* b + 2):% d \ n", b [0] [2], * (* b + 2));
printf ("b [1] [0]:% d * (* (b + 1)):% d \ n", b [1] [0], * (* (b + 1)));
printf ("b [1] [1]:% d * (* (b + 1) +1):% d \ n", b [1] [1], * (* (b + 1) +1) );
visszatér 0;

A 3. példában.c, azt láttuk, hogy egy sor mérete decimális jelöléssel 16. A b + 1 és b közötti különbség 10 hexadecimális értékben. A hexadecimális 10 egyenértékű a decimális 16-val.

Következtetés

Tehát ebben a cikkben megtudtuk

  1. A 2D tömb deklarációja
  2. 2D tömb inicializálása
  3. 2D tömb memória leképezése
  4. A 2D tömb mutatószámtana

Most minden kétség nélkül használhatjuk a 2D tömböt a C programunkban,

Hivatkozások

A munka néhány ötletének elismerését a „Pointers and 2-D Arrays” tanfolyam inspirálta, Palash Dey Számítástudományi és Engg Tanszék. Indiai Műszaki Intézet Kharagpur

A legjobb parancssori játékok Linuxhoz
A parancssor nem csak a legnagyobb szövetséges a Linux használatakor, hanem a szórakozás forrása is lehet, mert sok olyan szórakoztató játék lejátszás...
A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...