Kétdimenziós tömbök, programozás C és C

A lehetővé teszi, hogy a többdimenziós tömböket. A legegyszerűbb fajta többdimenziós tömb egy két dimenziós tömb. Kétdimenziós tömb - egy sor egydimenziós tömböket. A kétdimenziós tömb nyilvánították az alábbiak szerint:

array_name típusa [méret a második mérés] [első mérési felbontás];

Ahhoz, hogy a elemet indexek 3, 5 d a tömb kell használni

A következő példában, a kétdimenziós tömb rögzített szám 1 és 12, majd a tömb jelenik meg.

#include
int main (void)
int T, I, NUM [3] [4];
/ * * Száma letöltési /
a (t = 0; t<3; ++t)
for (i = 0; i<4; ++i)
NUM [t] [i] = (t * 4) + i + 1;

Ebben a példában, NUM [0] [0] 1, NUM [0] [1] értéke 2, NUM [0] [2] - 3, és így tovább. NUM [2] [3] értéke 12.

Kétdimenziós tömbök tárolják egy mátrixban, ahol az első index felelős egy húr, és a második oszlop -ez. Ez azt jelenti, hogy a megfelelő index gyorsabban változik, mint a bal, ha mozoghat a tömb a sorrendben az elemek elrendezése a memóriában. Ábra. Ez azt mutatja, grafikus ábrázolása egy kétdimenziós tömb a memóriában. A bal oldali index lehet tekinteni, mint egy pointert a húr.

A bájtok száma szükséges memória elhelyezésére a két-dimenziós tömb, a következőképpen számítjuk ki:

bájt = méret a második mérés felbontása az első mérés * * sizeof (bázis típusú)

Feltételezve, hogy a rendszer egy 2 bájtos egész számokat, az egész tömb méretei 10 5 fog 10 * 5 * 2, azaz a 100 byte.

Amikor a két-dimenziós tömböt használjuk függvényében érv, egy mutatót az első elemet. A függvény megkapja a kétdimenziós tömb, akkor legalább, méretének meghatározására az első mérés, mivel a fordítóprogram tudnia kell a hossza az egyes vonal megfelelő indexelés a tömbben. Például, a feladata, hogy fogadja kétdimenziós egész tömb a méretei 5, 10, akkor nyilvánítják a következőképpen:

Meg tudja határozni a méret a második dimenzióban, de ez nem kötelező. A fordító tudnia kell a mérete az első dimenzió megfelelő típusú szolgáltatók

függvényében. Ha a szöveg nem ismert, de nem lehet tudni, hol a következő sorban kezdődik.

Rövid alábbi program használ egy kétdimenziós tömb tárolja az értékelés minden tanuló a tanár osztályteremben. A program feltételezi, hogy a tanár három osztály van, és minden osztály legfeljebb 30 versenyző. Figyeljük meg, hogy tudom elérni a fokozat az egyes funkciók:

#include
#include
#include
#include
#define OSZTÁLYOK 3
#define osztályzatok 30
int grade [óra] [osztályzatok];
void disp_grades (int g [] [osztályzatok]), enter_grades (void);
int get_grade (int num);
int main (void) / * program tárolására becslések * /
char ch;
for (;;) do printf ( "(E) nter fokozat \ n");
printf ( "(R) ELENTÉS fokozat \ n");
printf ( "(Q) uit \ n");
ch = toupper (getche ());
>
while (ch! = 'E' ch! = 'R' ! Ch = 'Q');
kapcsolót (ch)
esetben 'E':
enter_grades ();
break;
esetén 'R':
disp_grades (grade);
break;
esetben a 'Q':
vissza 0;
>
>
>

/ * A minden tanuló fokozatok * /
void enter_grades (void)
int t, i;
a (t = 0; t for (i = 0; i grade [t] [i] = get_grade (i);
>
>

/ * A bejegyzés értékelése * /
int get_grade (int num) char s [80];
printf ( "adja évfolyam hallgatói #: \ n"., szám + 1);
kap (s);
visszatérési (atoi (ek));
>

/ * A következtetés osztály felmérések * /
void disp_grades (int g [] [osztályzatok])
int t, i;
a (t = 0; t printf ( "osztály #: \ n.", t + 1);
for (i = 0; i printf ( "grade hallgatói # \ n ..", i + 1, a G [t] [i]);
>
>

Ábra. Elhelyezése a kétdimenziós tömb a memóriában

Kapcsolódó cikkek