![]() ![]() ![]() | Pointers og 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. 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.
|
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; } | |||
|
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; } | |||
|
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; } | |||
|
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.