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};
c

Typ ú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.
c
Tip

V 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: 3
c

2D 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}
}
c

Princí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];
c

Ako 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
*/
c

Reť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
}
c

Reť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
Prejsť na hlavné menu