Arrayer gör det möjligt att lagra en upp­sätt­ning re­la­te­ra­de data i C utan att behöva skapa flera variabler. Som regel är arrayer en­di­men­sio­nel­la, men de kan utökas till att omfatta valfritt antal di­men­sio­ner. Vi visar dig hur du skapar 2D-arrayer i C och hur du använder dem effektivt.

Vad är grunderna för att skapa arrayer i C?

För att kunna skapa och behärska 2D-matriser i C måste du känna till grunderna för denna struktur i pro­gram­me­rings­språ­ket C.

Liksom i många andra språk är arrayer i C ett min­nes­block där flera värden av samma datatyp kan lagras. Detta gör det möjligt att spara och kombinera flera värden under ett enda va­ri­a­bel­namn. Storleken på arrayen måste vara känd vid kom­pi­le­rings­till­fäl­let och kan inte ändras i efterhand. Följande kodblock il­lu­stre­rar hur man skapar arrayer 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 anges framför va­ri­a­bel­nam­net. I det här exemplet anger de fyr­kan­ti­ga pa­ren­te­ser­na att variabeln inte är ett enskilt värde utan en matris. Heltalet mellan pa­ren­te­ser­na anger hur många element av denna datatyp som kan lagras i matrisen. I exemplet ovan skapas matrisen number1 utan att ini­ti­a­li­se­ras. Det innebär att inga värden skrivs in i fälten. Dessa kan sedan fyllas med värden i koden senare.

Array number2, å andra sidan, ini­ti­a­li­se­ras manuellt när den skapas. Denna metod är tidskrä­van­de för större arrayer och den re­sul­te­ran­de koden är ofta obe­grip­lig. I de flesta fall är det därför inte den bästa metoden. Det är oftast bättre att försöka fylla dina arrayer pro­gram­ma­tiskt. Du kan göra detta med hjälp av en for-loop, till exempel:

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

Beroende på vilket ope­ra­tiv­sy­stem du har, vilken C-standard du använder och var du har de­kla­re­rat en oi­ni­ti­e­rad variabel i ditt program, kan denna variabel innehålla ett slump­mäs­sigt värde. Detta gäller även för arrayfält. Det är därför bäst att inte komma åt fält som du ännu inte har initierat, särskilt om värdet som sparats i dem tolkas som en pekare.

När en array har skapats kan du använda dess index för att komma åt enskilda värden. Det är viktigt att notera att arrayer börjar med index 0. Exemplet nedan visar hur det fungerar:

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

En 2D-matris kan skapas i C genom att skapa en matris där varje fält in­ne­hål­ler en annan matris. Du kan läsa mer om 2D-matriser i nästa avsnitt.

Hur man skapar 2D-matriser i C

2D-matriser i C är egent­li­gen bara en­di­men­sio­nel­la matriser. Varje fält in­ne­hål­ler bara en annan matris. En 2D-matris kan förstås som en tabell eller matris med värden. 2D-matriser kan skapas och fyllas med följande syntax:

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

Här re­pre­sen­te­rar siffran i den vänstra hak­pa­ren­te­sen indexet som ska nås i den första matrisen. Siffran till höger re­pre­sen­te­rar indexet i den andra. Tänk på dessa två siffror som 2D-ko­or­di­na­ter eller rad- eller ko­lumn­num­mer. Precis som en­di­men­sio­nel­la matriser kan även två­di­men­sio­nel­la matriser ini­ti­a­li­se­ras med värden när de skapas.

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

Principen om en matris inom en annan matris är inte begränsad till två di­men­sio­ner. Du kan använda den här metoden för att skapa matriser med valfritt antal di­men­sio­ner.

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

Hur du kan använda 2D-matriser i C

Iterera över en 2D-matris

2D-matriser i C (eller fler­di­men­sio­nel­la matriser) används oftast för att skapa fler­di­men­sio­nel­la da­ta­struk­tu­rer. I följande exempel fylls en två­di­men­sio­nell matris om­väx­lan­de med nollor och ettor för att re­pre­sen­te­ra ett schack­brä­de:

#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

Sträng­ma­tri­ser

Om du vill använda arrayer på ett skickligt sätt är det viktigt att komma ihåg att en array bara är en pekare till en plats i minnet, och det är så C-kom­pi­la­torn tolkar den. Indexet som anges när man skriver till eller läser från enskilda fält re­pre­sen­te­rar för­skjut­ning­en längs arrayen i för­hål­lan­de till bas­a­dres­sen. Låt oss titta på följande exempel för att få en bättre för­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

Strängar behandlas på samma sätt i C. Det är möjligt att iterera över en sträng som om den vore en array. Du kan se detta i följande exempel där tre poster som lagras i en array skrivs tecken för tecken med versaler. För att komma åt tecken används ar­ray­in­dex­fäl­tet (hak­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å till huvudmeny