Masīvi ļauj C valodā uzglabāt saistītu datu kopu, ne­vei­do­jot vairākas mainīgās. Parasti masīvi ir vien­mē­rī­gi, bet tos var pa­pla­ši­nāt, lai iekļautu jebkuru dimensiju skaitu. Mēs parādīsim, kā C valodā izveidot 2D masīvus un kā tos efektīvi izmantot.

Kādi ir masīvu vei­do­ša­nas pamati C valodā?

Lai varētu izveidot un apgūt 2D masīvus C valodā, jums ir jāzina šīs struk­tū­ras pamati C prog­ram­mē­ša­nas valodā.

Līdzīgi kā daudzās citās valodās, masīvi C valodā ir atmiņas bloks, kurā var saglabāt vairākas viena datu tipa vērtības. Tas ļauj saglabāt un apvienot vairākas vērtības zem viena mainīgā nosaukuma. Masīva izmērs ir jāzina kom­pi­lā­ci­jas laikā, un to pēc tam nevar mainīt. Šis koda bloks ilustrē, kā veidot masīvus C valodā:

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

Datu tips ir norādīts pirms mainīgā vārda. Šajā piemērā kvad­rā­tie­ka­vas norāda, ka šis mainīgais nav atsevišķa vērtība, bet masīvs. Skaitlis starp iekavām norāda, cik daudz šī datu tipa elementu var tikt saglabāti masīvā. Iepriekš minētajā piemērā masīvs number1 ir izveidots ne­in­i­cia­li­zēts. Tas nozīmē, ka laukos nav ie­rak­stī­tas nekādas vērtības. Tās var tikt aiz­pil­dī­tas ar vērtībām kodā vēlāk.

Savukārt masīvs number2 tiek ini­cia­li­zēts manuāli, kad tas tiek izveidots. Šī pieeja ir lai­kie­til­pī­ga lielākiem masīviem, un rezultātā iegūtais kods bieži vien ir ne­sap­ro­tams. Tāpēc vairumā gadījumu tā nav labākā pieeja. Parasti ir labāk mēģināt aizpildīt masīvus prog­ram­ma­tis­ki. To var izdarīt, piemēram, iz­man­to­jot for-cilpu:

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

Atkarībā no jūsu ope­rē­tājsis­tē­mas, izmantotā C standarta un vietas, kur programmā esat dek­la­rē­jis ne­in­i­cia­li­zē­tu mainīgo, šis mainīgais var saturēt nejaušu vērtību. Tas attiecas arī uz masīvu laukiem. Tāpēc ir labāk ne­iz­man­tot laukus, kurus vēl neesat ini­cia­li­zē­jis, jo īpaši, ja tajos saglabātā vērtība tiek in­ter­pre­tē­ta kā rādītājs.

Kad masīvs ir izveidots, varat izmantot tā indeksu, lai piekļūtu at­se­viš­ķām vērtībām. Ir svarīgi atzīmēt, ka masīvi sākas ar indeksu 0. To parāda zemāk redzamais piemērs:

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

2D masīvu var izveidot C valodā, iz­vei­do­jot masīvu, kurā katrs lauks satur citu masīvu. Vairāk par 2D masīviem varat lasīt nākamajā sadaļā.

Kā izveidot 2D masīvus C valodā

2D masīvi C valodā patiesībā ir vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vien

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

Šeit skaitlis kreisajā kvad­rā­tie­ka­vā norāda indeksu, kas jāizmanto pirmajā masīvā. Skaitlis labajā pusē norāda indeksu otrajā masīvā. Uztveriet šos divus skaitļus kā 2D koor­di­nā­tas vai rindu vai kolonnu numurus. Tāpat kā vien­kār­šos masīvus, arī divkāršos masīvus var ini­cia­li­zēt ar vērtībām, kad tie tiek izveidoti.

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

Princips, ka masīvs var atrasties citā masīvā, nav ie­ro­be­žots ar divām di­men­si­jām. Šo metodi var izmantot, lai izveidotu masīvus ar jebkuru dimensiju skaitu.

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

Kā izmantot 2D masīvus C valodā

At­kār­to­jiet 2D masīvu

2D masīvi C valodā (vai daudz­di­men­si­ju masīvi) visbiežāk tiek izmantoti, lai izveidotu daudz­di­men­si­ju datu struk­tū­ras. Turp­mā­ka­jā piemērā divdi­men­si­ju masīvs tiek aiz­pil­dīts ar nulēm un vien­i­nie­kiem, lai attēlotu šaha galdiņu:

#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

String masīvi

Ja vēlaties prasmīgi izmantot masīvus, ir svarīgi at­ce­rē­ties, ka masīvs ir tikai norāde uz vietu atmiņā, un tā C kom­pi­la­tors to saprot. Indekss, kas norādīts, rakstot vai lasot at­se­viš­ķus laukus, attēlo nobīdi gar masīvu attiecībā pret bāzes adresi. Lai labāk izprastu šo jēdzienu, ap­ska­tī­sim šādu piemēru:

#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

Stingus C valodā apstrādā tāpat. Stingu var iziet kā masīvu. To var redzēt šajā piemērā, kur trīs ieraksti, kas saglabāti masīvā, tiek rakstīti burtu pa burtam ar lielajiem burtiem. Lai piekļūtu burtiem, izmanto masīva indeksa lauku (kvad­rā­tie­ka­vas):

#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