Sådan oprettes og bruges 2D-matricer i C
Arrays gør det muligt at gemme et sæt relaterede data i C uden at skulle oprette flere variabler. Som regel er arrays endimensionelle, men de kan udvides til at omfatte et vilkårligt antal dimensioner. Vi viser dig, hvordan du opretter 2D-arrays i C, og hvordan du bruger dem effektivt.
Hvad er det grundlæggende i at oprette arrays i C?
For at kunne oprette og beherske 2D-matricer i C skal du kende grundlæggende om denne struktur i programmeringssproget C.
Ligesom i mange andre sprog er arrays i C en hukommelsesblok, hvor flere værdier af samme datatype kan gemmes. Dette gør det muligt at gemme og kombinere flere værdier under ét variabelnavn. Arrayets størrelse skal være kendt på kompilerings tidspunktet og kan ikke ændres efterfølgende. Følgende kodeblok illustrerer, 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};cDatatypen angives foran variabelnavnet. I dette eksempel angiver de firkantede parenteser, at denne variabel ikke er en enkelt værdi, men en matrix. Heltallet mellem parenteserne angiver, hvor mange elementer af denne datatype der kan gemmes i matrixen. I ovenstående eksempel oprettes matrixen number1 uden initialisering. Det betyder, at der ikke skrives nogen værdier i felterne. Disse kan derefter udfyldes med værdier i koden senere.
Array number2 initialiseres derimod manuelt, når det oprettes. Denne fremgangsmåde er tidskrævende for større arrays, og den resulterende kode er ofte uforståelig. I de fleste tilfælde er det derfor ikke den bedste fremgangsmåde. Det er normalt bedre at forsøge at udfylde dine arrays programmatisk. 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.cAfhængigt af hvilket operativsystem du har, hvilken C-standard du bruger, og hvor du har deklareret en uinitialiseret 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 initialiseret, 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 individuelle 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: 3cEn 2D-matrix kan udføres i C ved at oprette en matrix, hvor hvert felt indeholder 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 endimensionelle arrays. Hvert felt indeholder 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.cHer repræsenterer tallet i venstre firkantede parentes indeksen, der skal tilgås i den første matrix. Tallet til højre repræsenterer indekset i den anden. Tænk på disse to tal som 2D-koordinater eller række- eller kolonnenumre. Ligesom endimensionelle matricer kan todimensionelle matricer også initialiseres 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}
}cPrincippet om en matrix inden for en anden matrix er ikke begrænset til to dimensioner. Du kan bruge denne metode til at oprette matricer med et vilkårligt antal dimensioner.
int ints_four_dimensions[10][10][10][10];cHvordan du kan bruge 2D-matricer i C
Iterér over en 2D-matrix
2D-matricer i C (eller flerdimensionelle matricer) bruges oftest til at oprette flerdimensionelle datastrukturer. I det følgende eksempel udfyldes en todimensionel matrix skiftevis med nuller og ettaller for at repræsentere 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
*/cStreng-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 hukommelsen, og det er sådan, C-kompilatoren forstår det. Det indeks, der angives, når der skrives til eller læses fra individuelle felter, repræsenterer forskydningen langs arrayen i forhold til basisadressen. Lad os se på følgende eksempel for at få en bedre forstå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
}cStrings 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 matrixindeksfeltet (firkantede parenteser):
#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