Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Relevanta dokument
TDDC76 - Programmering och Datastrukturer

2 Pekare och dynamiska variabler.

TDDC76 - Programmering och Datastrukturer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

*Pekarvärden *Pekarvariabler & *

TDIU01 - Programmering i C++, grundkurs

Pekare och arrayer. Indexering och avreferering

4 Sammansatta datatyper

Tommy Färnqvist, IDA, Linköpings universitet

Att använda pekare i. C-kod

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Skizz till en enkel databas

Övning från förra gången: readword

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

TDDC76 Programmering och datastrukturer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Föreläsning 5: Introduktion av pekare

Funktionens deklaration

Föreläsning 10. Pekare (Pointers)

F5: Högnivåprogrammering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

F5: Högnivåprogrammering

TDIU01 - Programmering i C++, grundkurs

Innehåll. Pekare Exempel

TDIU01 - Programmering i C++, grundkurs

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Innehåll. Pekare Exempel

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Föreläsning 6: Metoder och fält (arrays)

#include <stdio.h> #include <string.h>

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

maxlist-1. Indexerad lista Länkad lista

Filhantering. Grunderna i filhantering. Uppbyggnad av filer. Data hierarkin. Filpekaren. Positionering i filer

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Föreläsning REPETITION & EXTENTA

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

C++-programmets beståndsdelar

TDIU01 (725G67) - Programmering i C++, grundkurs

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Tentamen EDAF30 Programmering i C++

Assemblerprogrammering för ARM del 3

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Tentamen i Datakunskap NT

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Föreläsning 2, vecka 8: Repetition

Innehåll. Pekare Syntax

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Poster ( structar ) Postdeklarationer

Tentamen EDAF30 Programmering i C++

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

C++ - En introduktion

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Introduktion till arv

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

C++ Lektion Tecken och teckenfält

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

5 Arv och dynamisk bindning FIGUR

Instuderingsfrågor, del D

Det finns många flaggor till g++,

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

[] Arrayer = Indexerad variabel

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Övningar Dag 2 En första klass

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Slumptalsfunktioner + switch-satsen

Enkla datatyper minne

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

SP:PROG3 HT12 Tenta

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll

Föreläsning 7 Strängar

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Introduktionslaboration

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Tentamen *:58/ID100V Programmering i C Exempel 3

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TDIU01 Programmering i C++

Transkript:

Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är en variabel som innehåller adressen till en annan variabel. Varför använder vi pekare? Används i programmering bl.a. för att: länka ihop datastrukturer (se senare om poster) föra över parametervärden kunna referera olika minnesplatser dynamiskt, dvs. under körning av ett program pekare har en nära koppling till strängar 3 DAVA07/08 JE,MG,MG,PS 4 DAVA07/08 JE,MG,MG,PS Alla variabler i ditt program har en adress i minnet. Denna adress kallas pekarvärde I C kan du få reda på värdet för en minnesadress med hjälp av minnesoperatorn & Deklaration/initiering av pekare Ex. int *ip, *ip2, i3, i4; i3 = 78; ip = &i3; &i3 ip i3 78 5 DAVA07/08 JE,MG,MG,PS 6 DAVA07/08 JE,MG,MG,PS, 1

Minnesrepresentation Minnesadress 2028 2032 2036 2040 2088 2092 78 2040 Variabel i4 i3 *ip *ip2 Användande av pekare ip2 = ip; i4 = 70; &i3 ip i3 78 ip2 i4 70 7 DAVA07/08 JE,MG,MG,PS 8 DAVA07/08 JE,MG,MG,PS Forts. Ex ip = &i4; Användande av pekare i3 ip 78 ip2 i4 70 Vad är skillnaden mellan byt_1 och byt_2? void byt_1(int *px, int *py) int temp; temp = *px; *px = *py; *py = temp; 9 DAVA07/08 JE,MG,MG,PS 10 DAVA07/08 JE,MG,MG,PS void byt_2(int x, int y) int temp; temp = x; x = y; y = temp; 11 DAVA07/08 JE,MG,MG,PS int i, p; p = 8; i = 5; byt_1(&i,&p); cout << i = << i << p = << p << endl; byt_2(i,p); cout << i = << i << p = << p << endl; 12 DAVA07/08 JE,MG,MG,PS, 2

px: i byt_1() px: i main() p: i: som inte används bör peka på 0 varför? vilka risker finns med pekare? py: 13 DAVA07/08 JE,MG,MG,PS 14 DAVA07/08 JE,MG,MG,PS Hur kommer vi åt pekarvärdet? Exempel: int *p1; int i = 7, g = 19; p1= &i; g = *p1; cout << Värdet är << g << endl; Vektorer/Strängar 15 DAVA07/08 JE,MG,MG,PS DAVA07/08 JE,MG,MG,PS Vektorer I minnet hos datorn ligger elementen i vektorn i sekvens, dvs. efter varandra Samtliga element i vektorn måste vara av samma typ OBS! Första positionen i vektorn är position 0 Ex. Vektorer int my_vektor[6]=3,7,19,-3,44,9; my_vektor int 3 7 19-3 44 9 position 0 1 2 3 4 5 17 DAVA07/08 JE,MG,MG,PS 18 DAVA07/08 JE,MG,MG,PS, 3

Vektorer Viktigt Se till att du har tillräcklig storlek på din vektor! int my_vektor[6]=3,7,19,-3,44,9,321,2; Vektorer/strängar En sträng är en vektor som kan lagra tecken OBS! Reservera plats för \0 (strängslut) char my_vektor[6]= O, l, l, e, \0 ; my_vektor? Strängslut int 3 7 19-3 44 9 321 2 char O l l e \0 position 0 1 2 3 4 5 position 0 1 2 3 4 5 19 DAVA07/08 JE,MG,MG,PS 20 DAVA07/08 JE,MG,MG,PS Vektorer/strängar Initiering av strängar Ex: char namn[7] = B, e, n, g, t, \0 ; enklare char namn[7] = Bengt ; och vektorer/strängar Vad har pekare och vektorer gemensamt? När vill man använda en vektor? Hur skapar man en sträng? char B e n g t \0 position 0 1 2 3 4 5 6 21 DAVA07/08 JE,MG,MG,PS 22 DAVA07/08 JE,MG,MG,PS och vektorer char *p; resp. char p[5]; Är detta samma sak, eller vad skiljer? vektorer Exempel: Vad blir utskriften av nedanstående? int test[3], i ; /* dekl. en vektor och en var */ test[1] = 5; test[2]= 77; for( i = 0; i < 3; i++) cout << På plats << i << ligger värdet << test[i]) << endl; return 0; 23 DAVA07/08 JE,MG,MG,PS 24 DAVA07/08 JE,MG,MG,PS, 4

Matriser En vektor går i en dimension Det går att skapa strukturer i flera dimensioner, matriser I princip går det också att skapa strukturer i ännu fler dimensioner, men det blir svårare att tänka sig Strängar/Matriser Ex. resultat i en tävling med flera omgångar int result[3][6]; Tävlande Omgång 7 19 3 10 2 6 5 4 31 2 6 9 2 1 4 6 8 2 25 DAVA07/08 JE,MG,MG,PS 26 DAVA07/08 JE,MG,MG,PS Strängar Hur jämför du två strängar? Ex.. Hur lägger du ihop två strängar? Ex.. Strängfunktioner #include <string.h> strcpy(x,y) strcmp(x,y) strcat(x,y) strlen(str) Hur kopierar du en sträng? Ex.. 27 DAVA07/08 JE,MG,MG,PS 28 DAVA07/08 JE,MG,MG,PS Strängfunktioner char * strcpy(char * s1, const char s2); /* resultatet är att s2 har kopierats till s1*/ int strcmp(char * s1, char * s2); /* jämför s1 och s2 om de är lika*/ char * strcat(char * s1, char * s2); /* slår ihop s1 och s2 så att s1 blir en sammnaslagen sträng med s1- >s2*/ int strlen(char * str); /* returnerar antal tecken i str, men strängslutsteckenet räknas ej */ Allokering Allokera: tilldela och anvisa plats Allokering innebär att göra en minnesplats tillgänglig för användning Allokering sker för enkla datatyper automatiskt ex. int i; 29 DAVA07/08 JE,MG,MG,PS 30 DAVA07/08 JE,MG,MG,PS, 5

new char *duplicera(char *s) char *p; p = new char[strlen(s)+1]; if(p!=null) strcpy(p,s); return p; Avallokering Deallokering innebär motsatsen till allokering, dvs. att lämna tillbaka den minnesplats man tidigare tog i anspråk till systemet. delete [] p; int * q = new int; delete q; q = NULL; 31 DAVA07/08 JE,MG,MG,PS 32 DAVA07/08 JE,MG,MG,PS Allokering kopplat till pekare och arrayer char *p; resp. char p[10]; char p[10] innebär att ett minnesutrymme för 10 tecken är allokerat char *p innebär att en pekare är deklarerad, men inget användbart minnesutrymme är allokerat. Allokering/ och vektorer Exempel: char test[7]; char *p char a b a f P g \0 position 0 1 2 3 4 5 6 p? I detta fall är minnesutrymmet för vektorn allokerat Det här är en pekare till första pos för en ännu ej allokerad sträng Strängslut 33 DAVA07/08 JE,MG,MG,PS 34 DAVA07/08 JE,MG,MG,PS som parametrar int sum(const int * arr, int storl) int i, s = 0; for(i = 0; i < storl; i++) s += arr[i]; return s; int i = 5 ; summa; int v1[i]=1,2,3,4,5; summa =sum(v1,i); cout << Summan är << summa << endl; return 0; 35 DAVA07/08 JE,MG,MG,PS, 6