Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'Pointers og Arrays
25.  Arrays af flere dimensioner

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 arrays25.2 Processering af arrays med to 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);  
Program 25.1    Erklæring, initialisering og to identiske gennemløb af et to dimensionelt array.

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;
}
Program 25.2    Det samlede program.

C understøtter arrays af vilkårlig mange dimensioner

Tre- og flerdimensionelle arrays er umiddelbare generaliseringer af to dimensionelle arrays

Genereret: Onsdag 7. Juli 2010, 15:11:53
Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'