Nizi omogočajo shra­nje­va­nje niza povezanih podatkov v jeziku C, ne da bi bilo treba ustvariti več spre­men­ljivk. Nizi so praviloma eno­di­men­zi­o­nal­ni, vendar jih je mogoče razširiti na poljubno število dimenzij. Pokazali vam bomo, kako ustvariti dvo­di­men­zi­o­nal­ne nize v jeziku C in kako jih učin­ko­vi­to upo­ra­blja­ti.

Kaj so osnovni principi ustvar­ja­nja nizov v jeziku C?

Da bi lahko ustvar­ja­li in obvladali 2D matrike v C, morate poznati osnove te strukture v pro­gram­skem jeziku C.

Podobno kot v mnogih drugih jezikih so nizi v C-ju po­mnil­ni­ški blok, v katerem je mogoče shraniti več vrednosti istega po­dat­kov­ne­ga tipa. To omogoča shra­nje­va­nje in zdru­že­va­nje več vrednosti pod enim imenom spre­men­ljiv­ke. Velikost niza mora biti znana ob pre­va­ja­nju in je pozneje ni mogoče spre­me­ni­ti. Naslednji kodni blok prikazuje, kako ustvariti nize v C-ju:

int numbers1[15];
// Optionally, the saved values can be specified when they are created:
int numbers2[5] = {1, 2, 3, 4, 5};
c

Tip podatkov je naveden pred imenom spre­men­ljiv­ke. V tem primeru kvadratni oklepaji ozna­ču­je­jo, da ta spre­men­ljiv­ka ni enotna vrednost, ampak niz. Celo število med oklepaji označuje, koliko elementov tega tipa podatkov je mogoče shraniti v nizu. V zgornjem primeru je niz number1 ustvarjen ne­i­ni­ci­a­li­zi­ran. To pomeni, da v polja niso zapisane nobene vrednosti. Te je mogoče kasneje v kodi zapolniti z vre­dnost­mi.

Niz number2 pa se ini­ci­a­li­zi­ra ročno ob ustvar­ja­nju. Ta pristop je pri večjih nizih zamuden, končni kod pa je pogosto ne­ra­zu­mljiv. Zato v večini primerov ni najboljši pristop. Običajno je bolje, da nize napolnite pro­gram­sko. To lahko storite na primer s for-zanko:

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

Odvisno od tega, kateri ope­ra­cij­ski sistem imate, kateri standard C upo­ra­blja­te in kje ste v programu de­kla­ri­ra­li ne­i­ni­ci­a­li­zi­ra­no spre­men­ljiv­ko, lahko ta spre­men­ljiv­ka vsebuje naključno vrednost. To velja tudi za polja niza. Zato je najbolje, da ne dostopate do polj, ki jih še niste ini­ci­a­li­zi­ra­li, še posebej če se vrednost, shranjena v njih, in­ter­pre­ti­ra kot kazalec.

Ko je niz ustvarjen, lahko uporabite njegov indeks za dostop do po­sa­me­znih vrednosti. Pomembno je omeniti, da se nizi začnejo z indeksom 0. Spodnji primer vam bo to pokazal:

int numbers2[5] = {1, 2, 3, 4, 5};
numbers2[3] = numbers2[2];
printf("%d\n", numbers2[3]);
// Output: 3
c

2D matriko lahko izvedete v jeziku C tako, da ustvarite matriko, v kateri vsako polje vsebuje drugo matriko. Več o 2D matrikah lahko preberete v na­sle­dnjem poglavju.

Kako ustvariti 2D matrike v C

2D matrike v C so v resnici eno­di­men­zi­o­nal­ne matrike. Vsako polje vsebuje samo drugo matriko. 2D matriko lahko razumemo kot tabelo ali matriko vrednosti. 2D matrike lahko ustvarimo in napolnimo z naslednjo sintakso:

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

Tukaj številka v levih oglatih oklepajih pred­sta­vlja indeks, do katerega je treba dostopati v prvem nizu. Številka na desni strani pred­sta­vlja indeks v drugem nizu. Ti dve številki si lahko pred­sta­vlja­te kot 2D ko­or­di­na­te ali številke vrstic ali stolpcev. Tako kot eno­di­men­zi­o­nal­ni nizi se tudi dvo­di­men­zi­o­nal­ni nizi lahko ini­ci­a­li­zi­ra­jo z vre­dnost­mi , ko so ustvar­je­ni.

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

Načelo matrike znotraj druge matrike ni omejeno na dve dimenziji. To metodo lahko uporabite za ustvar­ja­nje matrik s poljubnim številom dimenzij.

int ints_four_dimensions[10][10][10][10];
c

Kako lahko upo­ra­blja­te 2D matrike v C-ju

Ponovi preko 2D matrike

2D matrike v C (ali več­di­men­zi­o­nal­ne matrike) se naj­po­go­ste­je upo­ra­blja­jo za ustvar­ja­nje več­di­men­zi­o­nal­nih po­dat­kov­nih struktur. V na­sle­dnjem primeru je dvo­di­men­zi­o­nal­na matrika izmenično za­pol­nje­na z ničlami in enicami, da pred­sta­vlja šahovnico:

#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

Nizi nizov

Če želite spretno upo­ra­blja­ti nize, je pomembno, da imate v mislih, da je niz le kazalec na mesto v po­mnil­ni­ku in tako ga razume tudi C-kom­pi­la­tor. Indeks, ki je določen pri pisanju ali branju po­sa­me­znih polj, pred­sta­vlja premik vzdolž niza glede na osnovni naslov. Da bi bolje razumeli, si oglejmo naslednji primer:

#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

Nizi se v jeziku C obrav­na­va­jo na enak način. Nizi je mogoče po­na­vlja­ti, kot da bi bili nizi. To je mogoče videti v na­sle­dnjem primeru, kjer so trije zapisi, shranjeni v nizu, zapisani znak za znakom z velikimi črkami. Za dostop do znakov se uporablja polje indeksa niza (ogledne oklepaje):

#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
Go to Main Menu