# Kā izveidot un izmantot 2D masīvus C valodā

Masīvi ļauj C valodā uzglabāt saistītu datu kopu, neveidojot vairākas mainīgās. Parasti masīvi ir vienmērīgi, bet tos var paplašinā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 veidošanas pamati C valodā?

Lai varētu izveidot un apgūt 2D masīvus C valodā, jums ir jāzina šīs struktūras pamati C programmēšanas 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 kompilācijas laikā, un to pēc tam nevar mainīt. Šis koda bloks ilustrē, kā veidot masīvus C valodā:

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

Datu tips ir norādīts pirms mainīgā vārda. Šajā piemērā kvadrātiekavas 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 **neinicializēts**. Tas nozīmē, ka laukos nav ierakstītas nekādas vērtības. Tās var tikt aizpildītas ar vērtībām kodā vēlāk.

Savukārt masīvs `number2` tiek inicializēts manuāli, kad tas tiek izveidots. Šī pieeja ir laikietilpīga lielākiem masīviem, un rezultātā iegūtais kods bieži vien ir nesaprotams. Tāpēc vairumā gadījumu tā nav labākā pieeja. Parasti ir labāk mēģināt aizpildīt masīvus **programmatiski**. To var izdarīt, piemēram, izmantojot for-cilpu:

```c
int numbers3[100];
for(int i = 0; i < 100; i++) {
numbers3[i] = i + 1;
}
// Creates an array containing the integers 1 to 100.
```

Tip Atkarībā no jūsu operētājsistēmas, izmantotā C standarta un vietas, kur programmā esat deklarējis neinicializē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 neizmantot laukus, kurus vēl neesat inicializējis, jo īpaši, ja tajos saglabātā vērtība tiek interpretēta kā **rādītājs**.

Kad masīvs ir izveidots, varat izmantot tā indeksu, lai piekļūtu atsevišķā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:

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

2D masīvu var izveidot C valodā, izveidojot 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

```c
ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.
```

Šeit skaitlis kreisajā kvadrātiekavā 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 koordinātas vai rindu vai kolonnu numurus**. Tāpat kā vienkāršos masīvus, arī divkāršos masīvus var inicializēt ar vērtībām, kad tie tiek izveidoti.

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

Princips, ka masīvs var atrasties citā masīvā, nav ierobežots ar divām dimensijām. Šo metodi var izmantot, lai izveidotu masīvus ar **jebkuru dimensiju skaitu**.

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

## Kā izmantot 2D masīvus C valodā

### Atkārtojiet 2D masīvu

2D masīvi C valodā (vai daudzdimensiju masīvi) visbiežāk tiek izmantoti, lai izveidotu daudzdimensiju datu struktūras. Turpmākajā piemērā divdimensiju masīvs tiek aizpildīts ar nulēm un vieniniekiem, lai attēlotu šaha galdiņu:

```c
#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
*/
```

### String masīvi

Ja vēlaties prasmīgi izmantot masīvus, ir svarīgi atcerēties, ka masīvs ir tikai **norāde uz vietu atmiņā,** un tā C kompilators to saprot. Indekss, kas norādīts, rakstot vai lasot atsevišķus laukus, attēlo **nobīdi gar masīvu attiecībā pret bāzes adresi**. Lai labāk izprastu šo jēdzienu, apskatīsim šādu piemēru:

```c
#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
}
```

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 (kvadrātiekavas):

```c
#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.
*/
```


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/2d-masivi-c-valoda/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/2d-masivi-c-valoda/) for AI/LLM consumption.