Arrays gør det muligt at gemme et sæt re­la­te­re­de data i C uden at skulle oprette flere variabler. Som regel er arrays en­di­men­sio­nel­le, men de kan udvides til at omfatte et vil­kår­ligt antal di­men­sio­ner. Vi viser dig, hvordan du opretter 2D-arrays i C, og hvordan du bruger dem effektivt.

Hvad er det grund­læg­gen­de i at oprette arrays i C?

For at kunne oprette og beherske 2D-matricer i C skal du kende grund­læg­gen­de om denne struktur i pro­gram­me­rings­spro­get C.

Ligesom i mange andre sprog er arrays i C en hukom­mel­ses­blok, hvor flere værdier af samme datatype kan gemmes. Dette gør det muligt at gemme og kombinere flere værdier under ét va­ri­a­bel­navn. Arrayets størrelse skal være kendt på kom­pi­le­rings tids­punk­tet og kan ikke ændres ef­ter­føl­gen­de. Følgende kodeblok il­lu­stre­rer, hvordan man opretter arrays i C:

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

Datatypen angives foran va­ri­a­bel­nav­net. I dette eksempel angiver de fir­kan­te­de pa­ren­te­ser, at denne variabel ikke er en enkelt værdi, men en matrix. Heltallet mellem pa­ren­te­ser­ne angiver, hvor mange elementer af denne datatype der kan gemmes i matrixen. I oven­stå­en­de eksempel oprettes matrixen number1 uden ini­ti­a­li­se­ring. Det betyder, at der ikke skrives nogen værdier i felterne. Disse kan derefter udfyldes med værdier i koden senere.

Array number2 ini­ti­a­li­se­res derimod manuelt, når det oprettes. Denne frem­gangs­må­de er tids­kræ­ven­de for større arrays, og den re­sul­te­ren­de kode er ofte ufor­stå­e­lig. I de fleste tilfælde er det derfor ikke den bedste frem­gangs­må­de. Det er normalt bedre at forsøge at udfylde dine arrays pro­gram­ma­tisk. Du kan f.eks. gøre dette med en for-loop:

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

Afhængigt af hvilket ope­ra­tiv­sy­stem du har, hvilken C-standard du bruger, og hvor du har de­kla­re­ret en ui­ni­ti­a­li­se­ret variabel i dit program, kan denne variabel indeholde en tilfældig værdi. Dette gælder også for array-felter. Derfor er det bedst ikke at tilgå felter, som du endnu ikke har ini­ti­a­li­se­ret, især hvis den værdi, der er gemt i dem, fortolkes som en pointer.

Når en matrix er oprettet, kan du bruge dens indeks til at få adgang til in­di­vi­du­el­le værdier. Det er vigtigt at bemærke, at matricer starter med indeks 0. Eksemplet nedenfor viser dig dette:

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

En 2D-matrix kan udføres i C ved at oprette en matrix, hvor hvert felt in­de­hol­der en anden matrix. Du kan læse mere om 2D-matricer i næste afsnit.

Sådan oprettes 2D-matricer i C

2D-arrays i C er egentlig bare en­di­men­sio­nel­le arrays. Hvert felt in­de­hol­der blot et andet array. Et 2D-array kan forstås som en tabel eller matrix med værdier. 2D-arrays kan oprettes og udfyldes med følgende syntaks:

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

Her re­præ­sen­te­rer tallet i venstre fir­kan­te­de parentes indeksen, der skal tilgås i den første matrix. Tallet til højre re­præ­sen­te­rer indekset i den anden. Tænk på disse to tal som 2D-ko­or­di­na­ter eller række- eller ko­lon­ne­num­re. Ligesom en­di­men­sio­nel­le matricer kan to­di­men­sio­nel­le matricer også ini­ti­a­li­se­res med værdier, når de oprettes.

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

Prin­cip­pet om en matrix inden for en anden matrix er ikke begrænset til to di­men­sio­ner. Du kan bruge denne metode til at oprette matricer med et vil­kår­ligt antal di­men­sio­ner.

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

Hvordan du kan bruge 2D-matricer i C

Iterér over en 2D-matrix

2D-matricer i C (eller fler­di­men­sio­nel­le matricer) bruges oftest til at oprette fler­di­men­sio­nel­le da­ta­struk­tu­rer. I det følgende eksempel udfyldes en to­di­men­sio­nel matrix skiftevis med nuller og ettaller for at re­præ­sen­te­re et skakbræt:

#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

Streng-arrays

Hvis du vil bruge arrays på en dygtig måde, er det vigtigt at huske, at en array blot er en pointer til en placering i hukom­mel­sen, og det er sådan, C-kom­pi­la­to­ren forstår det. Det indeks, der angives, når der skrives til eller læses fra in­di­vi­du­el­le felter, re­præ­sen­te­rer for­skyd­nin­gen langs arrayen i forhold til ba­sisadres­sen. Lad os se på følgende eksempel for at få en bedre for­stå­el­se:

#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

Strings behandles på samme måde i C. Det er muligt at gentage en string, som om den var en matrix. Du kan se dette i følgende eksempel, hvor tre poster, der er gemt i en matrix, skrives tegn for tegn med store bogstaver. For at få adgang til tegnene bruges ma­trixin­deks­fel­tet (fir­kan­te­de pa­ren­te­ser):

#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
Gå til ho­ved­me­nu­en