Ing. Daniel Hládek PhD.
Hodnoty sú uložené za sebou
Každá hodnota má svoju adresu
int pole[\4] = {4,3,2,1};
index: 0 1 2 3
+------+------+-------+-------+
hodnota: | 4 | 3 | 2 | 1 |
+------+------+-------+-------+
adresa: \#10 \#14 \#18 \#22
premennej nejakého typu
Názov poľa je smerník na jeho začiatok.
Ľubovoľný smerník môže byť začiatkom poľa.
Ale existuje pole polí
int pole2d[\2][\2] = {,
{4 ,3 },
{5, 6 }
};
index1: 0 1
index2: 0 1 0 1
++------+------++------+------++
hodnota: || 4 | 3 || 5 | 6 ||
++------+------++------+------++
adresa: \#10 \#14 \#18 \#22
int pole2d[][\2] = {,
{4 ,3 },
{5, 6 }
};
Dvojrozmerné pole je možné inicializovať rovnako ako jednorozmerné:
int pole2d[\ROWS][\COLS] = {4 ,3 ,5, 6};
[note] Toto podporujú iba nové prekladače
(VLA - variable length array)
veľkosť dátového typu sa mení počas behu programu [/note]
void spracuj(int pocet_riadkov,int pocet_stlpcov, int pole[\pocet_riadkov][\pocet_stlpcov]);
Šírka druhého rozmeru (vnútorného pola), nemusí byť konštanta:
void spracuj(int pocet_riadkov,int pocet_stlpcov, int pole[][\pocet_stlpcov]);
void spracuj(int* 2dpole,int rows,int cols);
Jednoducho vypočítame pozíciu bunky v jednorozmernom poli.
Jednorozmerné pole vyzerá v pamäti rovnako ako dvojrozmerné.
void draw(const int rows, const int cols, char* array){
for(int y = 0; y < rows; y++){
for(int x = 0; x < cols; x++){
int z = x + cols * y;
printf("%c", array[\z]);
}
printf("\n");
}
}
void spracuj(int** 2dpole,int rows,int cols);
Robí sa s ním ako s dvojrozmerným poľom
void draw(const int rows, const int cols, char array[][\cols]){
for(int y = 0; y < rows; y++){
for(int x = 0; x < cols; x++){
printf("%c", array[\y][\x]);
}
printf("\n");
}
}
Môže byť dvojrozmerné pole prvkom iného poľa? Vedeli by sme priradiť číslu jeho podobu na sedemsegmentovom displeji:
1 2 3
| - - | - - |
| | |
| - - | - - |
| | |
) | - - - - |
Je dvojrozmerné pole znakov (každý riadok je zakončený nulou)
char arr2[][\4] = {
" |",
" |",
" |",
" |",
" |"
};
je to isté ako:
char arr3[][\4] = {
{' ',' ','|',0},
{' ',' ','|',0},
{' ',' ','|',0},
{' ',' ','|',0},
{' ',' ','|',0}
};
char arr2[][\5][\4] = {
{
" |",
" |",
" |",
" |",
" |",
},
{
"--|",
" |",
"--|",
"| ",
"|__",
},
{
"--|",
" |",
"--|",
" |",
"__|",
}
};
Takže môžeme napísať:
draw(rows, cols, arr2[\0]);
pre vykreslenie dvojrozmerného poľa.