TDDC76 - Programmering och Datastrukturer

Relevanta dokument
TDDC76 - Programmering och Datastrukturer

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

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

Tommy Färnqvist, IDA, Linköpings universitet

TDIU01 - Programmering i C++, grundkurs

TDDC76 Programmering och datastrukturer

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

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

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

TDDC76 - Programmering och Datastrukturer

TDIU01 Programmering i C++

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

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

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

*Pekarvärden *Pekarvariabler & *

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

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

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

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

TDIU01 - Programmering i C++, grundkurs

Föreläsning 6: Introduktion av listor

Föreläsning 10. Pekare (Pointers)

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

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

2 Pekare och dynamiska variabler.

C++ - En introduktion

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

Intro till standardbiblioteket. Eric Elfving

Innehåll. Pekare Syntax

Det finns många flaggor till g++,

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

Introduktionslaboration

Föreläsning 5: Introduktion av pekare

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

TDDC77 Objektorienterad Programmering

Att använda pekare i. C-kod

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

5 Arv och dynamisk bindning FIGUR

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Poster ( structar ) Postdeklarationer

Skizz till en enkel databas

Föreläsning 6 pekare och pekare tillsammans med arrayer

Introduktionslaboration

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Tentamen EDAF30 Programmering i C++

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Pekare och arrayer. Indexering och avreferering

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Övningar Dag 2 En första klass

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

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

Enkla datatyper minne

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

TDDC76 - Programmering och Datastrukturer

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

1 Klasser och objektorientering Vad är objektorientering?

TDIU01 - Datortenta (DAT2)

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tillämpad programmering

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

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

C++ Objektorientering - Klasser. Eric Elfving

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

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

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Sätt att skriva ut binärträd

IS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1

1 Namnkontroll (NameControl)

Programmering A. Johan Eliasson

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

C++ Lektion Tecken och teckenfält

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

grundläggande C++, funktioner m.m.

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

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

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDC76 - Programmering och Datastrukturer

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

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

int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int

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

TDIU01 - Datortenta (DAT2)

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

Datastrukturer. Typdeklarationer. Ny datastruktur i C- struct. exempel. Ofta bra att kunna fšra ihop information av olika datatyper till en enhet.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 3.1: Datastrukturer, en översikt

4 Sammansatta datatyper

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

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Objektorienterad programmering Föreläsning 5

Transkript:

TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap

1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor

2 / 20 Internminne - RAM Datorns internminne (RAM, random access memory) består av en ordnad sekvens bitar Vi kan normalt sett adressera (komma åt) en byte i taget (8 bitar) En processor arbetar normalt med ett ord (idag ofta 64 bitar) i taget

3 / 20 Minne Vad händer i minnet? int x {3421};. int x: 3421

4 / 20 Variabler En variabel har alltid: Ett namn En datatyp Ett värde Kompilatorn: Översätter namnet till en adress, bestämmer mängden minne (i byte) som behövs utifrån datatypen, och tolkar innehållet (värdet) enligt vald datatyp.

5 / 20 Adress Man kan ta fram adressen till en variabel med adressoperatorn (&) int x {3421}; cout << &x;

6 / 20 Pekare Man kan lagra en adress i en variabel. Variabeln kallas då pekare. Pekarvariabler deklareras med en asterisk (*) som ``datatyp'' Förutom (*) måste man ange vilken datatyp som finns på adressen!. int x: 3421 int x {3421}; int * ip {&x}; ip: *

7 / 20 Pekare För att komma åt det värde en pekare pekar på används avrefereringsoperatorn (*) #include <iostream > using namespace std; int main() { int x {3421}; int *ip {&x}; cout << ip << endl; cout << *ip << endl; return 0; } 14 3421 Vi får bara avreferera pekare som pekar på adresser som vårt program äger

8 / 20 Dynamiskt minne Pekare används oftast för att skapa dynamiskt minne Vi allokerar nytt minne med new-operatorn Vi kan endast nå det nya utrymmet med hjälp av pekaren int* ip; ip = new int; *ip = 5123; int * ip {new int{5123}};

9 / 20 Pekare Minnesläcka Om vi redan pekar på en minnesadress och ber om nytt utrymme tappar vi bort det vi pekade på. Detta kallas minnesläcka, ett av de vanligaste felen när vi jobbar med pekare Vi äger fortfarande utrymmet, men har inget sätt att nå det int* ip {new int{44}}; ip = new int{123};. int ip: * 44 int 123

10 / 20 Pekare Om vi vill lämna tillbaka minne till operativsystemet gör vi det med delete-operatorn int *ip {new int{345}}; * int ip:. 345 delete ip; * int ip:. 345 OBS, delete ändrar inte på pekarens värde!

11 / 20 Pekare Värdet nullptr betyder inget värde för pekare 1 int * ip{}; // ip sätts till nullptr 2 ip = new int{}; // det nya heltalet får värdet 0 3 delete ip; 4 ip = nullptr; kodrad: 1 2 3 4 Minnet: ip:. * * int ip:. 0 * int ip:. 0 ip:. *

12 / 20 Pekare void f(int *p) { delete p; p = new int{2}; } int main() { int *ptr {new int{12}}; f(ptr); cout << *ptr << endl; delete ptr; } Vad händer?

13 / 20 Pekare Precis som vanligt måste vi ta emot referenser om vi vill ändra på värden: void f(int *& p) { delete p; p = new int{2}; } int main() { int *ptr {new int{12}}; f(ptr); cout << *ptr << endl; delete ptr; }

14 / 20 Alias Om man tycker det är jobbigt med alla asterisker kan man skapa ett nytt namn för en typ med aliasdefinition Skrivs på formen using NAMN = TYPBESKRIVNING; using int_ptr = int *; void f(int_ptr & p); int main() { int_ptr ptr { new int{4} }; delete ptr; }

15 / 20 Pekare till poster För att komma åt fälten i poster kan man använda sig av medlemsåtkomstoperatorn (->) struct Book { string title; string author; int pages; }; Book *bp { new Book }; bp->title = "C++ Primer"; Man kan använda avreferering också, men då krävs parenteser cout << (*bp).title << endl;

16 / 20 Dynamiska datastrukturer En dynamisk datastruktur kan ändra storlek under programkörningen Vi har redan använt en dynamisk datastruktur, string Det finns många fler inbyggda i std, exempelvis vector som kan lagra flera värden av en viss typ.

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position 7 0. 4 12 17 0 1 2 3

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken 7 0. 4 12 17? 0 1 2 3 4

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position 7 0. 4 12 17? 0 1 2 3 4

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position 7 0. 4 12 17 17 0 1 2 3 4

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position Stoppa in värdet 7 0. 4 12 12 17 0 1 2 3 4

17 / 20 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position Stoppa in värdet 7 0. 4 7 12 17 0 1 2 3 4

18 / 20 Enkellänkade listor En enkellänkad lista består av noder. En nod är en post som innehåller två saker, ett värde av någon datatyp samt en pekare till nästa nod i listan. Detta gör en pekare till en nod till en lista. Tom lista (eller slutet av listan) markeras med pekarvärdet nullptr.. 3 7 9

19 / 20 Enkellänkade listor. 3 7 9

20 / 20 Enkellänkade listor Deklaration av en listtyp: struct List_Node { int data; List_Node * next; }; Alternativ lösning med alias: struct List_Node; using List = List_Node *; struct List_Node { int data; List next; };

Eric Elfving Institutionen för datavetenskap www.liu.se