Ako vytvoriť a používať 2D polia v jazyku C
Polia umožňujú ukladať súbor súvisiacich údajov v jazyku C bez nutnosti vytvárať viacero premenných. Polia sú spravidla jednorozmerné, ale môžu byť rozšírené tak, aby zahŕňali ľubovoľný počet rozmerov. Ukážeme vám, ako vytvoriť 2D polia v jazyku C a ako ich efektívne používať.
Aké sú základy vytvárania polí v jazyku C?
Aby ste mohli vytvárať a ovládať 2D polia v jazyku C, musíte poznať základy tejto štruktúry v programovacom jazyku C.
Podobne ako v mnohých iných jazykoch, aj v jazyku C sú polia bloky pamäte, v ktorých je možné uložiť viacero hodnôt rovnakého dátového typu. To umožňuje uložiť a kombinovať viacero hodnôt pod jedným názvom premennej. Veľkosť poľa musí byť známa v čase kompilácie a neskôr ju nie je možné zmeniť. Nasledujúci blok kódu ilustruje, ako vytvárať polia v jazyku C:
int numbers1[15];
// Optionally, the saved values can be specified when they are created:
int numbers2[5] = {1, 2, 3, 4, 5};cTyp údajov je uvedený pred názvom premennej. V tomto príklade hranaté zátvorky označujú, že táto premenná nie je samostatná hodnota, ale pole. Číslo medzi zátvorkami udáva, koľko prvkov tohto typu údajov môže byť uložených v poli. V uvedenom príklade je pole number1 vytvorené neinicializované. To znamená, že do polí nie sú zapísané žiadne hodnoty. Tieto polia môžu byť neskôr vyplnené hodnotami v kóde.
Na druhej strane, pole number2 sa pri vytvorení inicializuje ručne. Tento prístup je pri väčších poliach časovo náročný a výsledný kód je často nezrozumiteľný. Vo väčšine prípadov to teda nie je najlepší prístup. Zvyčajne je lepšie pokúsiť sa vyplniť polia programovo. Môžete to urobiť napríklad pomocou cyklu for:
int numbers3[100];
for(int i = 0; i < 100; i++) {
numbers3[i] = i + 1;
}
// Creates an array containing the integers 1 to 100.cV závislosti od operačného systému, ktorý používate, štandardu C, ktorý používate, a miesta, kde ste v programe deklarovali neinicializovanú premennú, môže táto premenná obsahovať náhodnú hodnotu. To platí aj pre polia. Preto je najlepšie nepripájať sa k poliam, ktoré ste ešte neinicializovali, najmä ak je hodnota v nich uložená interpretovaná ako ukazovateľ.
Po vytvorení poľa môžete pomocou jeho indexu pristupovať k jednotlivým hodnotám. Je dôležité poznamenať, že polia začínajú indexom 0. Ukážka nižšie vám to demonštruje:
int numbers2[5] = {1, 2, 3, 4, 5};
numbers2[3] = numbers2[2];
printf("%d\n", numbers2[3]);
// Output: 3c2D pole možno v jazyku C vytvoriť tak, že vytvoríte pole, v ktorom každé pole obsahuje ďalšie pole. Viac informácií o 2D poliach nájdete v nasledujúcej časti.
Ako vytvoriť 2D polia v jazyku C
2D polia v jazyku C sú v skutočnosti len jednorozmerné polia. Každé pole obsahuje len ďalšie pole. 2D pole možno chápať ako tabuľku alebo maticu hodnôt. 2D polia možno vytvoriť a vyplniť pomocou nasledujúcej syntaxe:
ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.cČíslo v ľavých zátvorkách predstavuje index, ku ktorému sa pristupuje v prvom poli. Číslo na pravej strane predstavuje index v druhom poli. Tieto dve čísla si predstavte ako 2D súradnice alebo čísla riadkov alebo stĺpcov. Rovnako ako jednorozmerné polia, aj dvojrozmerné polia môžu byť pri vytvorení inicializované hodnotami.
floats_two_dimensions[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284},
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
}cPrincíp poľa v rámci iného poľa nie je obmedzený na dve dimenzie. Táto metóda sa dá použiť na vytvorenie polí s ľubovoľným počtom dimenzií.
int ints_four_dimensions[10][10][10][10];cAko môžete používať 2D polia v jazyku C
Iterácia nad 2D poľom
2D polia v jazyku C (alebo viacrozmerné polia) sa najčastejšie používajú na vytváranie viacrozmerných dátových štruktúr. V nasledujúcom príklade je dvojrozmerné pole striedavo vyplnené nulami a jednotkami, aby predstavovalo šachovnicu:
#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
int chessboard[8][8];
for(int i = 0; i < ARRAY_LENGTH; i++) {
for(int j = 0; j < ARRAY_LENGTH; j++) {
chessboard[i][j] = (i + j) % 2;
printf("%d", chessboard[i][j]);
}
printf("\n");
}
return 0;
}
/*
Output:
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/cReťazcové polia
Ak chcete efektívne využívať polia, je dôležité mať na pamäti, že pole je len ukazovateľom na miesto v pamäti a takto ho chápe aj kompilátor jazyka C. Index špecifikovaný pri zápise alebo čítaní z jednotlivých polí predstavuje posun v poli vzhľadom na základnú adresu. Pozrime sa na nasledujúci príklad, aby sme si to lepšie predstavili:
#include <stdio.h>
int main() {
int number2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *number2);
// Output: 1
printf("%d\n", *(number2 + 2));
// Output: 3
}cReťazce sa v jazyku C spracovávajú rovnakým spôsobom. Je možné iterovať nad reťazcom, ako keby to bolo pole. Môžete to vidieť v nasledujúcom príklade, kde sú tri záznamy uložené v poli zapísané znak po znaku veľkými písmenami. Na prístup k znakom sa používa pole indexu (hranaté zátvorky):
#include <stdio.h>
int main() {
char* sentences[3];
sentences[0] = "Hello, this is the first sentence.\n";
sentences[1] = "This is the second sentence.\n";
sentences[2] = "And now there are three.\n";
printf("Original sentences:\n\n");
for(int i = 0; i < 3; i++) {
printf("%s", sentences[i]);
}
printf("\nChanged sentences:\n\n");
for(int i = 0; i < 3; i++) {
int j = 0;
while(sentences[i][j] != '\n') {
if(sentences[i][j] >= 'a' && sentences[i][j] <= 'z') {
printf("%c", sentences[i][j] - 0x20);
} else {
printf("%c", sentences[i][j]);
}
j++;
}
printf("\n");
}
}
/*
Output:
Original sentences:
Hello, this is the first sentence.
This is the second sentence.
And now there are three.
Changed sentences:
HELLO, THIS IS THE FIRST SENTENCE.
THIS IS THE SECOND SENTENCE.
AND NOW THERE ARE THREE.
*/c