Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'Pointers og Arrays
21.  Introduktion til arrays

I dette kapitel vil vi introducere arrays. Vi vil se på de væsentligste overordnede egenskaber af arrays, og vi vil se på nogle forhold, som er specifikke for C.

21.1 Arrays21.2 Arrays i C
 

21.1.  Arrays
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Et array er en tabel med effektiv tilgang til elementerne via heltallige indeks numre

Vi viser herunder et array med 11 elementer. Disse kaldes her e0, e1, ..., e10.

Med array elementerne mener vi det som befinder sig inden i kasserne i figur 21.1. Eksempelvis er e0 et element i tabellen. I et konkret program kunne e0 være et heltal. Elementerne er det lagrede indhold af tabellen. Alle elementerne i et array skal være af samme type.

Med array indekserne mener vi de forskellige pladser i et array. Inspireret af gængs matematisk notation kaldes indekser også ofte for subscripts. Indekserne i arrays i C starter altid med 0. Hvis der i alt er 11 elementer i tabellen er det højeste indeks således 10. Indekserne lagres ikke i tabellen. Det er kun en pladsbetegnelse. Da alle kasserne i tabellen har samme størrelse kan vi let slå direkte ned på et element med et bestemt indeks nummer.

Figur 21.1    Et array med 11 elementer indiceret fra 0 til 10

Herunder beskriver vi de vigtigste egenskaber af et array.

  • Alle elementer er af samme type

  • Index angiver en plads i tabellen

  • Elementerne i et array a tilgås med subscripting notation: a[i]

  • Når et array er skabt har det faste nedre og øvre indeksgrænser

    • Den nedre indeksgrænse er altid 0 i C.

  • Elementerne lagres konsekutivt (umiddelbart efter hinanden).

    • Dermed er det simpelt at beregne hvor et element med et bestemt index er lagret

    • Effektiv tilgang via index

Lad os understrege to ting her. For det første at et array er lagret i ét sammenhængende lagerområde. For det andet at grænserne for, og dermed antallet af elementer i et array, ikke kan ændres når først arrayet er skabt.

 

21.2.  Arrays i C
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Vi træder nu et skridt tilbage, og søger en motivation for at have arrays i vore programmer. Det gør vi i program 21.1 ved at erklære, initialisere og udskrive 11 variable, navngivet tabel0, ..., tabel10.

Det fremgår tydeligt, at program 21.1 er "træls". Det er uholdbart eksplicit at skulle erklære alle disse variable enkeltvis, at initialisere disse enkeltvis (på trods af at initialiseringen er systematisk), og at udskrive disse enkeltvis. Vi ønsker en bedre løsning, hvor vi i ét slag kan erklære table0, ..., table10. Endvidere ønsker vi at kunne initialisere og udskrive variable i en for-løkke.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main(void) {

  double table0, table1, table2, table3, table4, 
         table5, table6, table7, table8, table9, table10;

  table0 = 0.0;
  table1 = 2 * 1.0;
  table2 = 2 * 2.0;
  table3 = 2 * 3.0;
  table4 = 2 * 4.0;
  table5 = 2 * 5.0;
  table6 = 2 * 6.0;
  table7 = 2 * 7.0;
  table8 = 2 * 8.0;
  table9 = 2 * 9.0;
  table10 = 2 * 10.0;

  printf("%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n",
         table0, table1, table2, table3, table4,
	 table5, table6, table7, table8, table9, table10);

  return 0;
}
Program 21.1    Motivation for arrays - et stort antal simple variable.

I program 21.2 viser vi et program som svarer til program 21.1. I programmet herunder erklærer vi på det røde sted 11 doubles, som benævnes table[0], ... table[10]. Variablen table er erklæret som et array. På de to blå steder initialiserer og udskriver vi elementer i table.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void) {

  double table[11];
  int i;

  for(i = 0; i < 11; i++)
    table[i] = (double)(2 * i);

  for(i = 0; i < 11; i++)
    printf("%f ", table[i]);

  printf("\n");
  
  return 0;
}
Program 21.2    Introduktion af arrays.

Vi viser herunder en variant af program 21.2 hvor vi på det røde sted viser en direkte, manifest repræsentation af tabellen. Dette er nyttigt hvis ikke vi på en systematisk måde kan initialisere tabellen i en løkke. Det røde udtryk kaldes i C for en initializer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void) {

  double table[11] = 
    {0.0, 5.0, 8.0, 9.9, 10.2, 8.5, 99.9, 1.0, -5.2, 7.5, 9.4};
                      
  int i;

  for(i = 0; i < 11; i++)
    printf("%f ", table[i]);

  printf("\n");
  
  return 0;
}
Program 21.3    Eksplicit array initialisering - kun i erklæringer.

Det er vigtigt at iagttage, at initializers, ala {0.0, 5.0, ...}, som vist i program 21.2 kun kan bruges i erklæringer. Vi kan ikke bruge en initializer på venstre-siden af et assignment.

Med disse eksempler og beskrivelserne har vi introduceret de vigtigste egenskaber ved arrays i C. I de efterfølgende kapitler ser vi på arrays i forbindelse med pointere. I kapitel 27 og efterfølgende kapiteler ser vi på arrays i forbindelse med tekststrenge.

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