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

Relaterede dokumenter
Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009

Programmering i C. Lektion december 2008

Programmering i C. Lektion september 2009

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

Programmering i C. Lektion november 2008

Python programmering. Per Tøfting. MacFest

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

Programmering i C. Lektion september 2009

Forelæsning Uge 4 Mandag

21. Introduktion til arrays

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

Crash Course i Programmering. HumTek, RUC

Brug af digitale ind og udgange

Forelæsning Uge 4 Mandag

Eksempel: Skat i år 2000

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Sproget Rascal (v. 2)

DM507 Algoritmer og datastrukturer

På nedenstående billede skal du finde den figur som optræder nøjagtig 3 gange.

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

Online kursus: Programming with ANSI C

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

Programmering for begyndere Lektion 2. Opsamling mm

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP guide af Daniel Pedersen

Ugeseddel 4 1. marts - 8. marts

DM507 Algoritmer og datastrukturer

Lageradministration Paging og segmentering

Videregående Programmering for Diplom-E Noter

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

Klasser og objekter. (Afsnit i manualen)

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

DM507 Algoritmer og datastrukturer

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

DM507 Algoritmer og datastrukturer

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

Abstrakte datatyper C#-version

Kursusarbejde 3 Grundlæggende Programmering

// Definition af porte og funktioner

Hvad er Objekter - Programmering

Forelæsning Uge 2 Torsdag

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

Skriftlig eksamen i Datalogi

Internt interrupt - Arduino

Løsning af møntproblemet

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

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

Forelæsning Uge 4 Mandag

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

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

Programmering i C. Lektion oktober 2008

Sådan kan du sende data fra din egen hjemmeside til JitBesked via en HTML-JDF.

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

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj Indholdsfortegnelse

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

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

Introduktion til funktioner, moduler og scopes i Python

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

DM507 Algoritmer og datastrukturer

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Dokumentation af programmering i Python 2.75

Forelæsning Uge 3 Torsdag

Udarbejdet af CFU Absalon

Bits DM534. Rolf Fagerberg, 2012

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

Eksamen dcomnet Q2/2010. Navn

danske karakterer på Lcd

Forelæsning Uge 2 Mandag

Fra programmering til mikroprocessor

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

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

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Sommeren 2001, opgave 1

UNION-FIND. UNION-FIND-problemet. Forbundethed kan være svær at afgøre (især for en computer) Eksempel på udførelse

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Lær Python dag 1 - modul 1

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

Forelæsning Uge 4 Torsdag

Sikker kode? Gennemgang af mest almindelige hacker angreb

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

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

Optimering af fraværsregistrering

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

Variabel liste NETLON. RS1_variabelliste Side 1 af 8

Forelæsning Uge 3 Mandag

Programmering og Problemløsning, 2017

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Undervisningsbeskrivelse

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

Kapitel 4 Løkker i C#

Virkefeltsregler i Java

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DM507 Algoritmer og datastrukturer

Skriftlig eksamen, Programmer som Data januar 2014

DM507 Algoritmer og datastrukturer

Test af It-komponent

Transkript:

Programmering i C Lektion 5 11. december 2008 Pointers 1 Pointers 2 Referenceparametre 2 / 23 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Lvalue = Rvalue Declaring a pointer: i n t i ; i n t p t i ; p t i = & i ; 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 o f my_ int. Dereferencing: ptr_ example = 2; / / Sets the value o f the data / / pointed to by ptr_example. 3 / 23 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 ; p t r 3 = 5; p t r 2 = 5; / / gives warning 4 / 23

Eksempel: / p o i n t e r s. c / i n t i = 5, p t i = &i, j = 7, p t j ; char c= a, ptc = &c ; p t j = & j ; p t i = p t j ; p r i n t f ( " i=%d, p t i=%p, p t i=%d \ n ", i, p t i, p t i ) ; p r i n t f ( " j=%d, p t j=%p, p t j=%d \ n ", j, p t j, p t j ) ; p r i n t f ( " c=%c, ptc=%p, ptc=%c \ n ", c, ptc, ptc ) ; 5 / 23 / p o i n t e r s. c / i n t i = 5, p t i = &i, j = 7, p t j ; char c= a, ptc = &c ; p t j = & j ; p t i = p t j ; p r i n t f ( " i=%d, p t i=%p, p t i=%d \ n ", i, p t i, p t i ) ; p r i n t f ( " j=%d, p t j=%p, p t j=%d \ n ", j, p t j, p t j ) ; p r i n t f ( " c=%c, ptc=%p, ptc=%c \ n ", c, ptc, ptc ) ; &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 6 / 23 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] 7 / 23 Arrays 3 Arrays 4 Arrays og pointere 5 Eksempel 6 Out of bounds 8 / 23

Et array er en tabel af variable af samme type der kan tilgås via deres indeks. i n t t a l [ 3 ] ; 0 1 2 t a l [ 0 ] = 5 ; 5 0 1 2 t a l [ 1 ] = 4 ; 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) 9 / 23 I C er et array det samme som en konstant pointer til dets første indgang: / 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 ] ) ; 10 / 23 i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 1 2 3 4 5 11 / 23 i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 2 3 4 5 12 / 23

i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 2 3 4 5 13 / 23 i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 8 3 4 5 14 / 23 i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 8 3 4 5 15 / 23 i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 8 3 4 6 16 / 23

i n t a [ 5]= { 1, 2, 3, 4, 5 ; = a ; / or, = &a [ 0 ] ; / a 4 8 3 4 6 17 / 23 Pas på! C ser ikke efter om et indeks man forsøger at tilgå ligger indenfor arrayets grænser: / 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; / Programmet skriver i et hukommelsesområde det ikke har reserveret! I bedste tilfælde er det kun programmet der crasher... 18 / 23 Strenge 7 Strenge 8 Eksempel 9 Noter 10 string.h 19 / 23 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] 20 / 23

Lav alle forekomster af a om til i : / 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++; p r i n t f ( "%s \ n ", s ) ; 21 / 23 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 ] 22 / 23 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] 23 / 23