![]() ![]() ![]() | Pointers og Arrays |
Efter at vi har set på arrays med elementer af simple typer vil vi nu studere arrays hvor elementerne er arrays. Sådanne arrays kan forstås som arrays af to eller flere dimensioner.
|
25.1. To dimensionelle arrays
Indhold Op Forrige Næste Slide Aggregerede slides Stikord Programindeks Opgaveindeks
Arrays af to dimensioner er et array hvor elementtypen er en anden arraytype |
I figur 25.1 ses tre forskellige fortolkninger af a[2][3]. Øverst til venstre vises vores mentale model af en table med to dimensioner. Nederst til venstre vises arrays i arrays forståelsen, som er den korrekte begrebsmæssige forståelse i forhold til C. Til højre vises hvordan arrayet håndteres i lageret; Vi kan sige at arrayet er lineariseret. I forhold til den viste tabel af to dimensioner sker der en rækkevis lagring.
Figur 25.1 Illustrationer af et to dimensionelt array. Øverst til venstre illustreres forståelse af de to dimensioner, med to rækker og tre søjler. Vi kunne naturligvis lige så godt have byttet om på rækker og søjler. Nederst til venstre ses en forståelse der understreger at a er et array med to elementer, som begge er arrays af tre elementer. Længst til højre ses den maskinnære forståelse, 'row major' ordningen. |
Vi tænker normalt på a som en to-dimensionel tabel med to rækker og tre søjler. Reelt er elementerne lagret lineært og konsekutivt, i row major orden. Elementer som kun afviger med én i det sidste indeks er naboelementer. |
25.2. Processering af arrays med to dimensioner
Indhold Op Forrige Næste Slide Aggregerede slides Stikord Programindeks Opgaveindeks
Næste emne er helt naturligt hvordan vi gennemløber et array af flere dimensioner.
Det er naturligt at bruge to indlejrede for løkker når man skal processere to dimensionelle arrays Alternativt er det muligt at gennemløbe den samlede tabel lineært, med udgangspunkt i en pointer til det første element. |
De to gennemløb omtalt ovenfor er illustreret i program 25.1.
1 2 3 4 5 6 7 8 | double a[2][3] = {{1.1, 2.2, 3.3}, {4.4, 5.5, 6.6}}; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) sum1 += a[i][j]; for (k = 0; k < 2 * 3; k++) sum2 += *(&a[0][0] + k); | |||
|
For god ordens skyld viser vi program 25.1 som et komplet C program i program 25.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> int main(void) { int i, j, k; double sum1 = 0.0, sum2 = 0.0; double a[2][3] = {{1.1, 2.2, 3.3}, {4.4, 5.5, 6.6}}; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) sum1 += a[i][j]; for (k = 0; k < 2 * 3; k++) sum2 += *(&a[0][0] + k); printf("First method: the sum is: %f\n", sum1); printf("Second method: The sum is: %f\n", sum2); return 0; } | |||
|
C understøtter arrays af vilkårlig mange dimensioner Tre- og flerdimensionelle arrays er umiddelbare generaliseringer af to dimensionelle arrays |