Arrayer gör det möjligt att lagra en uppsättning relaterade data i C utan att behöva skapa flera variabler. Som regel är arrayer endimensionella, men de kan utökas till att omfatta valfritt antal dimensioner. 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 programmeringsspråket C.

Liksom i många andra språk är arrayer i C ett minnesblock 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 variabelnamn. Storleken på arrayen måste vara känd vid kompileringstillfället och kan inte ändras i efterhand. Följande kodblock illustrerar 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 variabelnamnet. I det här exemplet anger de fyrkantiga parenteserna att variabeln inte är ett enskilt värde utan en matris. Heltalet mellan parenteserna anger hur många element av denna datatyp som kan lagras i matrisen. I exemplet ovan skapas matrisen number1 utan att initialiseras. 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, initialiseras manuellt när den skapas. Denna metod är tidskrävande för större arrayer och den resulterande koden är ofta obegriplig. 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 programmatiskt. 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 operativsystem du har, vilken C-standard du använder och var du har deklarerat en oinitierad variabel i ditt program, kan denna variabel innehålla ett slumpmässigt 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 innehåller 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 egentligen bara endimensionella matriser. Varje fält innehåller 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 representerar siffran i den vänstra hakparentesen indexet som ska nås i den första matrisen. Siffran till höger representerar indexet i den andra. Tänk på dessa två siffror som 2D-koordinater eller rad- eller kolumnnummer. Precis som endimensionella matriser kan även tvådimensionella matriser initialiseras 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å dimensioner. Du kan använda den här metoden för att skapa matriser med valfritt antal dimensioner.

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 flerdimensionella matriser) används oftast för att skapa flerdimensionella datastrukturer. I följande exempel fylls en tvådimensionell matris omväxlande med nollor och ettor för att representera ett schackbrä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ängmatriser

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-kompilatorn tolkar den. Indexet som anges när man skriver till eller läser från enskilda fält representerar förskjutningen längs arrayen i förhållande till basadressen. Låt oss titta på följande exempel för att få en bättre förståelse:

#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 arrayindexfältet (hakparenteser):

#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