Kurt Nørmark ©
Institut for Datalogi, Aalborg Universitet
Sammendrag Forrige lektion Næste lektion Stikord Referencer Indhold | I denne lektion studerer vi pointere og arrays. Lad os dog erindre, at vi allerede i sidste lektion kiggede på det basale arraybegreb. Vi gennemgår først pointere. Dernæst ser vi på arrays som pointere. Efter dette kommer vi til arrays af flere dimensioner. Vi slutter af med sondringen mellem statisk og dynamisk lagerallokering. |
Introduktion til arrays |
Arrays i C Slide Indhold Stikord Referencer Lærebog |
Program: Motivation for arrays - et stort antal simple variable. |
|
Program: Introduktion af arrays. |
|
Program: Eksplicit array initialisering - kun i erklæringer. |
|
Arrays Slide Indhold Stikord Referencer Lærebog |
|
Figur. Et array med 11 elementer indiceret fra 0 til 10 | ![]() |
|
Pointers |
Introduktion til pointere Slide Indhold Stikord Referencer Lærebog |
|
Figur. En illustration af to pointer variable. pvar indeholder en pointer til en integer, som peger på adressen af var. pobj indeholder en anden pointer, der peger på et objekt obj1,som ikke er indeholdt i nogen variabel. Fra obj1 peges der på et andet objekt obj2, som 'cyklisk' peger tilbage på obj1. | ![]() |
|
Pointer variable Slide Indhold Stikord Referencer Lærebog |
|
Program: Erklæring og initialisering af et antal variable, hvoraf nogle er pointer variable. |
|
Figur. Grafisk illustration af variablene i, j, c og deres tilsvarende pointervariable. Læg mærke til værdien af ptr_i, som er sat til at pege på samme værdi som ptr_j, altså variablen j. | ![]() |
Program: Hele programmet inklusive udskrivning af variablenes værdier. |
|
Program: Output fra programmet. |
|
Addresse og dereferencing operatorerne Slide Indhold Stikord Referencer Lærebog |
|
|
Program: Fremhævelse af adresse og dereferencing udtryk programmet fra forrige side. |
|
|
|
CBD side 268 Slide Indhold Stikord Referencer |
Program: The variables i, j, p, q, r, and x. |
|
Tabel. |
|
|
Pointerbegrebet i C Slide Indhold Stikord Referencer Lærebog |
Begrebet pointer: En pointer er en værdi som betegner en adresse på et lagret dataobjekt |
|
Pointer typer Slide Indhold Stikord Referencer |
|
Program: Illustration af pointervariable af forskellige typer - giver compileringsfejl. |
|
Program: Samme program - kan oversættes og køres. |
|
Call by reference parametre |
Call by reference parametre Slide Indhold Stikord Referencer Lærebog |
|
Program: Et forsøg på ombytning af to variables værdi uden pointere - virker ikke. |
|
Program: En funktion der ombytter værdierne af to int variable. |
|
Program: Funktionen swap og et hovedprogram, som kalder swap på to variable. |
|
Program: Output fra programmet. |
|
|
Pointers og arrays |
Pointers og arrays (1) Slide Indhold Stikord Referencer Lærebog |
|
Figur. Et array med fem elementer og en pointer til første element | ![]() |
Program: Illustration af pointertilgang til arrays. |
|
Billedserie: Forskellige opdateringer af table ved brug af pointere | Forskellige opdateringer af table ved brug af pointere |
Billed nr. 1. ptr_table peger på elementet med index 0 i table | ![]() |
Billed nr. 2. *ptr_table refererer til indholdet i table[0]. Denne celles indehold ændres til 7.0. | ![]() |
Billed nr. 3. ptr_table flyttes én plads til højre. Indholdet af denne celle bliver indholdet af cellen table[0] * 5. | ![]() |
Billed nr. 4. ptr_table flyttes tre positioner længere til højre. Indholdet af den pågældende celle tælles én op. | ![]() |
Billed nr. 5. Indekset af den sidste celle (4) og indexet af table[0] (0) trækkes fra hinanden og tallet skrives ud. | ![]() |
Program: Et komplet C program, som illustrerer opdateringerne af table. |
|
Pointers og arrays (2) Slide Indhold Stikord Referencer Lærebog |
|
Program: Illustration af pointertilgang til arrays. |
|
Program: Hele det ovenstående program. |
|
Program: Output fra programmet. |
|
Program: Simpelt program med arrays fra starten af lektionen. |
|
Program: Et program hvor tabellen table tilgås via en pointer. Med rødt og blåt har vi fremhævet de aspekter, som svarer til detaljerne med samme farver i det
oprindelige array program: De røde erklæringer af tabellen, og de blå tilgange til array elementerne.
Med brunt ser vi et udtryk som udgør betingelsen for afslutningen af forløkkerne. Med lilla ser
vi en 'optælling' af pointeren. Denne form for pointeraritmetik diskuterer vi lidt senere i materialet. |
|
Program: Output fra programmet. |
|
Pointers og arrays (3) Slide Indhold Stikord Referencer Lærebog |
Program: Illustration af pointertilgang til arrays. |
|
|
|
Eksempel: Bubble sort Slide Indhold Stikord Referencer Lærebog |
|
Program: Function bubble som laver 'bubble sort' på arrayet a som har n heltalselementer. |
|
Program: Hele 'bubble sort' programmet - med løbende udskrift af arrayet. |
|
Billedserie: Illustration af de forskellige faser i boblesorteringen | Illustration af de forskellige faser i boblesorteringen |
Billed nr. 1. Det usorterede array | ![]() |
Billed nr. 2. Tallet -77 er, som det 'letteste' tal, boblet op foroven gennem en række ombytninger | ![]() |
Billed nr. 3. Tallet -5 er, som det 'letteste' resterende tal, boblet op foroven gennem en række ombytninger | ![]() |
Billed nr. 4. Tallet 7 er, som det 'letteste' tal, boblet op. Bemærk at de øverste tre tal - de røde - nu er sorteret. | ![]() |
Billed nr. 5. Mønstret fortsætter, nu med 3 som bobleren. Nu er de øverste fire tal røde og sorteret. | ![]() |
Billed nr. 6. Det næste 3 tal bringes på plads. Bemærk at vi reelt er færdige på dette tidspunkt. | ![]() |
Billed nr. 7. Den yderste forløkke fortsætter, men den indre foretager ikke flere ombytninger. | ![]() |
Billed nr. 8. Stadig samme situation. | ![]() |
Billed nr. 9. Slutbilledet. De røde tal er sorteret, og det sorte tal er større end dem alle. | ![]() |
|
Pointeraritmetik Slide Indhold Stikord Referencer Lærebog |
Program: Erklæring af to pointere p og q samt en int i. |
|
|
Program: En funktion som tæller antallet af tegn i en streng. |
|
Program: Hele programmet. |
|
Index out of bounds Slide Indhold Stikord Referencer Lærebog |
|
Program: Et eksempel på indicering uden for indeksgrænserne i et array. |
|
Program: Hele programmet. |
|
|
Arrays af flere dimensioner |
To dimensionelle arrays Slide Indhold Stikord Referencer Lærebog |
|
Figur. 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. | ![]() |
|
Processering af arrays med to dimensioner Slide Indhold Stikord Referencer Lærebog |
|
Program: Erklæring, initialisering og to identiske gennemløb af et to dimensionelt array. |
|
Program: Det samlede program. |
|
|
Statisk og dynamisk lagerallokering |
Statisk lagerallokering Slide Indhold Stikord Referencer Lærebog |
Begrebet statisk lagerallokering: Med statisk lagerallokering afsættes lagerplads implicit når den omkringliggende blok aktiveres. Lagerplads inddrages implicit når blokken forlades. |
Program: Illustration af statisk lagerallokering i C. |
|
|
Dynamisk lagerallokering (1) Slide Indhold Stikord Referencer Lærebog |
|
Begrebet dynamisk lagerallokering: Med dynamisk lagerallokering afsættes lagerplads eksplicit, når programmet har behov for det. |
Program: Et kreativt forsøg på dynamisk allokering - ikke ANSI C. |
|
Program: ANSI C Oversættelse af programmet. |
|
Program: Et program der foretager dynamisk allokering af et array. |
|
Program: Et program der dynamisk allokerer et to-dimensionelt array. |
|
|
Dynamisk lagerallokering (2) Slide Indhold Stikord Referencer Lærebog |
|
|
Samlede referencer Indhold Stikord |
|
Kapitel 6: Pointers og Arrays
Kursets hjemmeside Forfatteren's hjemmeside Om frembringelsen af disse sider Forrige lektion (top) Næste lektion (top) Forrige lektion (bund) Næste lektion (bund)
Genereret: 7. Juli 2010, 15:11:35