Programmering i C. Lektion september 2009

Relaterede dokumenter
Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable:

Programmering i C. Lektion september 2009

Programmering i C. Lektion december 2008

Programmering i C. Lektion september 2009

Programmering i C. Lektion november 2008

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

21. Introduktion til arrays

Programmering i C. Lektion september 2009

En streng er en sekvens af data af samme type. En tekststreng er en streng af datatypen tegn

Python programmering. Per Tøfting. MacFest

Forelæsning Uge 4 Mandag

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Eksempel: Skat i år 2000

Kursusarbejde 3 Grundlæggende Programmering

Forelæsning Uge 4 Mandag

Abstrakte datatyper C#-version

Brug af digitale ind og udgange

Programmering i C Intro og grundlæggende C 5. marts 2007

Videregående Programmering for Diplom-E Noter

Online kursus: Programming with ANSI C

// Definition af porte og funktioner

DM507 Algoritmer og datastrukturer

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Programmering i C. Lektion oktober 2008

Ugeseddel 4 1. marts - 8. marts

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Crash Course i Programmering. HumTek, RUC

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

DM507 Algoritmer og datastrukturer

Fra programmering til mikroprocessor

Programmering i C Videre med C (2 af 4) 19. marts 2007

Hvad er Objekter - Programmering

DM507 Algoritmer og datastrukturer

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

DM507 Algoritmer og datastrukturer

Software Construction 1 semester (SWC) Spørgsmål 1

Programmering for begyndere Lektion 2. Opsamling mm

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

! #!! $ % $! & " &'"! & *+ "! " $ $ ""!,-! $!.! $! " # 1!! &' "

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

DM507 Algoritmer og datastrukturer

Internt interrupt - Arduino

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

Klasser og objekter. (Afsnit i manualen)

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

PHP guide af Daniel Pedersen

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Sproget Rascal (v. 2)

Forelæsning Uge 4 Mandag

danske karakterer på Lcd

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Lageradministration Paging og segmentering

Forelæsning Uge 3 Torsdag

Løsning af møntproblemet

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Forelæsning Uge 2 Torsdag

DM507 Algoritmer og datastrukturer

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Skriftlig eksamen i Datalogi

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

Scripting. Opslag til (Vol. D. Dahlerup. Bemærk. Anvendte bøger: "Sams. og proteiner.

Aftenskole i programmering sæson Flere registreringer. Sæson 2 - Lektion 8

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

C++ Programmering V. 0.99

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

1B fil database. //globale variabler DateTime tid; // erklærer en variabel af typen datetime DateTime dag; // erklærer en variabel af typen datetime

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Anvendelse af metoder - Programmering

DM507 Algoritmer og datastrukturer

Forelæsning Uge 3 Torsdag

uprocessorens hardware

Analoge indgange og A/D konvertering. Analoge udgange

Kursusarbejde 2 Grundlæggende Programmering

Introduktion til funktioner, moduler og scopes i Python

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Udarbejdet af CFU Absalon

C++ Programmering V

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Forelæsning Uge 2 Mandag

Dokumentation af programmering i Python 2.75

Bits DM534. Rolf Fagerberg, 2012

SWC eksamens-spørgsmål. Oversigt

Forelæsning Uge 3 Mandag

Forelæsning Uge 4 Torsdag

1. Variable og assignment

Variabel liste NETLON. RS1_variabelliste Side 1 af 8

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Skriftlig eksamen, Programmer som Data januar 2014

up/ansi Eksamensspørgsmål

Programmering og Problemløsning, 2017

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Transkript:

Programmering i C Lektion 4 18. september 2009

Pointers Referenceparametre 2 / 19 Pointers 1 Pointers 2 Referenceparametre

Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads.

Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t.

Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. Getting the address of a variable: i n t my_int = 3; ptr_example = &my_int. / / makes ptr_example p o i n t to / / the address of my_int.

Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. Getting the address of a variable: i n t my_int = 3; ptr_example = &my_int. / / makes ptr_example p o i n t to / / the address of my_int. Dereferencing: ptr_example = 2; / / Sets the value of the data / / pointed to by ptr_example.

Pointers Referenceparametre 4 / 19 &j betegner adressen af variablen j pti betegner den værdi, som pti peger på &i er det samme som i (og & pti er det samme som pti) = dereference, & = reference

Pointers Referenceparametre 5 / 19 Eksempel: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr2, p t r 3 ; i n t main ( void ) { p t r 3 = 5; p t r 2 = 5; / / gives warning

Pointers Referenceparametre 6 / 19 *s should be sticky. Eksempel: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr2, p t r 3 ; i n t main ( void ) { p t r 3 = 5; p t r 2 = ( i n t ) 5; / / using a cast / / s t i l l not a good idea.

Pointers Referenceparametre 7 / 19 &j betegner adressen af variablen j pti betegner den værdi, som pti peger på &i er det samme som i (og & pti er det samme som pti) = dereference, & = reference

Pointers Referenceparametre 8 / 19 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre.

Pointers Referenceparametre 8 / 19 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre. Løsning: Kald funktionen med pointers som parametre:

Pointers Referenceparametre 8 / 19 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre. Løsning: Kald funktionen med pointers som parametre: Eksempel: en funktion der bytter om på to heltal: void swap ( i n t x, i n t y ) { i n t tmp ; tmp = x ; x = y ; y = tmp ; Bemærk at swap ikke laver om på de to pointers; kun på de værdier de peger på! [swap.c]

Pointers Referenceparametre 9 / 19 Eksempel: en funktion der bytter om på to heltal: i n t main ( void ) { i n t a = 3, b = 7; p r i n t f ( " Before : %d %d \ n ", a, b ) ; swap(&a, &b ) ; p r i n t f ( " A f t e r : %d %d \ n ", a, b ) ; return 0; void swap ( i n t x, i n t y ) { i n t tmp ; tmp = x ; x = y ; y = tmp ;

Arrays Arrays og pointere Eksempel Out of bounds 10 / 19 Arrays 3 Arrays 4 Arrays og pointere 5 Eksempel 6 Out of bounds

Arrays Arrays og pointere Eksempel Out of bounds Et array er en tabel af variable af samme type der kan tilgås via deres indeks. i n t t a l [ 3 ] ; t a l [ 0 ] = 5 ; t a l [ 1 ] = 4 ; 0 1 2 5 0 1 2 5 4 0 1 2 t a l [ 2 ] = t a l [ 0 ] + t a l [ 1 ] ; 5 4 9 et array skal deklareres med angivelse af type, og helst også størrelse: type a[n] laveste indeks er 0, højeste er N 1 indgangene lagres umiddelbart efter hinanden &a[k] == &a[0] + k sizeof(type) 11 / 19

Arrays Arrays og pointere Eksempel Out of bounds 12 / 19 I C er et array det samme som en konstant pointer til dets første indgang: #include < s t d i o. h> i n t main ( void ) { / array pt. c / i n t a [ 3 ], i ; a = 5; ( a + 1) = 4; ( a + 2) = a + ( a + 1 ) ; for ( i = 0; i < 3; i ++) { p r i n t f ( "%d : %d \ n ", i, a [ i ] ) ; return 0;

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 1 2 3 4 5 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 2 3 4 5 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 2 3 4 5 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 8 3 4 5 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 8 3 4 5 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 8 3 4 6 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; 0 1 2 3 4 a 4 8 3 4 6 pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 13 / 19

Arrays Arrays og pointere Eksempel Out of bounds 14 / 19 Pas på! C ser ikke efter om et indeks man forsøger at tilgå ligger indenfor arrayets grænser: #include < s t d i o. h> i n t main ( void ) { / array bad. c / i n t a [ 3 ] ; / Menigsløst r e s u l t a t / p r i n t f ( "%d \ n ", a [ 3 ] ) ; / FARLIGT! / / a [ 3 ] = 17; / return 0; Programmet skriver i et hukommelsesområde det ikke har reserveret! I bedste tilfælde er det kun programmet der crasher...

Strenge Eksempel Noter string.h 15 / 19 Strenge 7 Strenge 8 Eksempel 9 Noter 10 string.h

Strenge Eksempel Noter string.h 16 / 19 En streng i C er et nulafsluttet array af chars: char s [ ] = { A, a, l, b, o, r, g, \0 ; eller tilsvarende, en pointer til char: char s ; s= " Aalborg " ; Følgende initialisering går også: char s [ ] = " Aalborg " ; Men som assignment er den gal: char s [ ] ; s= " Aalborg " ; [streng-init.c]

Strenge Eksempel Noter string.h p r i n t f ( "%s \ n ", s ) ; return 0; 17 / 19 Lav alle forekomster af a om til i : #include < s t d i o. h> i n t main ( void ) { / abrakadabra. c / char s [ ] = " abrakadabra " ; / v i r k e r / / char s= " abrakadabra " ; / / v i r k e r IKKE / char p ; p r i n t f ( "%s \ n ", s ) ; p = s ; while ( p!= \0 ) { i f ( p == a ) { p= i ; p++;

Strenge Eksempel Noter string.h 18 / 19 en streng kan defineres som et array af char eller en pointer til char begge er nulafsluttet: sidste indgang er \0 ( sentinel ) i strenge der er defineret som et array, kan tegnene ændres i strenge der er defineret som en pointer, kan tegnene ikke ændres tegnet a er forskellig fra strengen a : a = 97 a =[ a, \0 ] den tomme streng: =[ \0 ]

Strenge Eksempel Noter string.h Biblioteket string.h leverer funktioner til håndtering af strenge: int strcmp( char s, char t) sammenligner s og t i leksikografisk orden < 0: s kommer før t = 0: s er lig med t > 0: s kommer efter t unsigned int strlen( char s) returnerer antallet af tegn i s (minus \0 ) char strcpy( char s, char t) kopierer t til s returnerer en pointer til s Pas på: Hvis der ikke er plads nok i s, går det galt! char strcat( char s, char t) tilføjer t til slutningen af s returnerer en pointer til s samme kommentar som for strcpy og en del flere [streng-eks.c] 19 / 19