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

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

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

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

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

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

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

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

Repetition C-programmering

Introduktion C-programmering

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

Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3

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

Att använda pekare i. C-kod

TDDC76 - Programmering och Datastrukturer

Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Det finns många flaggor till g++,

TDDC76 - Programmering och Datastrukturer

Pekare och arrayer. Indexering och avreferering

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

*Pekarvärden *Pekarvariabler & *

2 Pekare och dynamiska variabler.

TDIU01 - Programmering i C++, grundkurs

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

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

Föreläsning 5: Introduktion av pekare

Föreläsning 10. Pekare (Pointers)

Poster ( structar ) Postdeklarationer

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

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

Assemblerprogrammering för ARM del 3

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Innehåll. Pekare Syntax

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

Indexerade variabler

TDDC77 Objektorienterad Programmering

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

TDIU01 - Programmering i C++, grundkurs

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

Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp().

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

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Ulf Assarsson. Grafisk display + seriekommunika3on (USART) Läromoment: USART Grundläggande C-programmering del 2

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

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

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

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

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Arrays (indicerade variabler) Föreläsning 6

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Hantering av textsträngar och talsträngar. William Sandqvist

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Abstrakta datastrukturer

Exempel ( )

Operativsystem (IS1350) :00-12:00

Innehåll. Pekare Exempel

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Introduktion till arv

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Arrays (indicerade variabler) Föreläsning 4

Indicerade variabler

Tentamen i Programmering grundkurs och Programmering C

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

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.

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

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

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

Imperativ programmering. Föreläsning 2

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Programmering B med Visual C

En kort text om programmering i C.

Enkla datatyper minne

Programmeringsteknik med C och Matlab

SP:PROG3 HT12 Tenta

C++-programmets beståndsdelar

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

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

Innehåll. Pekare Exempel

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Skizz till en enkel databas

Tentamen EDAF30 Programmering i C++

TDIU01 - Programmering i C++, grundkurs

Assemblerprogrammering för ARM del 2

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

LEU240 Mikrodatorsystem

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad programmering i Java

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Typkonvertering. Java versus C

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Transkript:

Pekare och Arrayer Viktor Kämpe

Pekare Pekarens värde är en adress. Pekarens typ berättar hur man tolkar bitarna som finns på adressen. unsigned char* pek 0x3026 0x3026 0110 0001 typ värdet är en adress... 0x1001 0x1000 Ökande adresser Pekare och Arrayer/VK 2

Dereferera När vi dereferera en pekare så hämtar vi objektet som ligger på adressen. Antalet bytes vi läser beror på typen Tolkningen av bitarna beror på typen signed char 8 bitar 1111 1111 unsigned char -1 255 Pekare och Arrayer/VK 3

Pekare och Arrayer/VK 4

Operatorer #include <stdio.h> int main() { char a, b, *p; a = 'v'; b = a; p = &a; Deklaration av pekare Adressen av... } printf("b = %c, p = 0x%p (%c) \n", b, p, *p); a = 'k'; printf("b = %c, p = 0x%p (%c) \n", b, p, *p); Dereferering Utskift: b = v, p = 0x0027F7C3 (v) b = v, p = 0x0027F7C3 (k) Pekare och Arrayer/VK 5

Asterisken (*) betyder I deklarationer Pekartyp Som operator Dereferens ( av-referera ) char *p; char* p; void foo(int *pi); char a = *p; *p = 'b'; Pekare och Arrayer/VK 6

Aritmetik på pekare char *kurs = "Maskinorienterad Programmering"; *kurs; *(kurs+2); kurs++; kurs +=4; // 'M' // 's' // kurs pekar på 'a' // kurs pekar på 'n' Pekare och Arrayer/VK 7

[Sträng-exempel i CodeLite]

Array (Fält) #include <stdio.h> char namn1[] = {'E', 'm', 'i', 'l', '\0'}; char namn2[] = "Emilia"; char namn3[10]; int main() { printf("namn1: %s \n", namn1); printf("namn2: %s \n", namn2); printf("sizeof(namn2): %i \n", sizeof(namn2)); } return 0; Utskrift: namn1: Emil namn2: Emilia sizeof(namn2): 7 Pekare och Arrayer/VK 9

Likhet med pekare Har en adress och en typ. Indexering har samma resultat. Pekare och Arrayer/VK 10

Indexering #include <stdio.h> char* s1 = "Emilia"; char s2[] = "Emilia"; int main() { // tre ekvivalenta sätt att dereferera en pekare printf("'l' i Emilia (version 1): %c \n", *(s1+3) ); printf("'l' i Emilia (version 2): %c \n", s1[3] ); printf("'l' i Emilia (version 3): %c \n", 3[s1] ); } return 0; x[y] översätts till *(x+y) och är alltså ett sätt att dereferera en pekare. Pekare och Arrayer/VK 11

Skillnader mellan array och pekare Arrayer Adress känd i compile-time. Storlek känd i compile-time. Pekar-artitmetik inte möjlig. Oftast en relativ adress. T ex 103 bytes efter första instruktionen. Pekare och Arrayer/VK 12

Array (Fält) #include <stdio.h> char namn1[] = {'E', 'm', 'i', 'l', '\0'}; char namn2[] = "Emilia"; char namn3[10]; int main() { printf("namn1: %s \n", namn1); printf("namn2: %s \n", namn2); printf("sizeof(namn2): %i \n", sizeof(namn2)); Om ingen storlek anges i [ ] så blir arrayen tillräckligt stor. OBS. Funkar bara med initiering vid deklaration! 10 element stor array. } return 0; Utskrift: namn1: Emil namn2: Emilia sizeof(namn2): 7 Pekare och Arrayer/VK 13

Funktionsargument blir pekare void foo(int pi[]); void foo(int *pi); Då argument till funktioner bara är kända i run-time så kan vi inte passa arrayer. [ ] notationen finns, men betyder pekare! Pekare och Arrayer/VK 14

[Array-exempel i CodeLite]

Antal bytes med sizeof() #include <stdio.h> char* s1 = "Emilia"; char s2[] = "Emilia"; int main() { printf("sizeof(char): %i \n", sizeof(char) ); printf("sizeof(char*): %i \n", sizeof(char*) ); printf("sizeof(s1): %i \n", sizeof(s1) ); printf("sizeof(s2): %i \n", sizeof(s2) ); } return 0; sizeof(char): 1 sizeof(char*): 4 sizeof(s1): 4 sizeof(s2): 7 Sizeof utvärderas i compile-time. En (av få) undantag där arrayer och pekare är olika. Pekare och Arrayer/VK 16

Dynamisk minnesallokering malloc() free() Allokera minne Frigör minne Funktionsprototyp via: #include <stdlib.h> Pekare och Arrayer/VK 17

Dynamisk minnesallokering #include <stdlib.h> char s1[] = "This is a long string. It is even more than one sentence."; int main() { char* p; // allokera minne dynamiskt p = (char*)malloc(sizeof(s1)); // gör något med minnet som vi reserverat Antal bytes vi allokerar } // frigör minnet free(p); return 0; Pekare och Arrayer/VK 18

[Minnesallokering-exempel]

Minnesläckor En minnesläcka uppkommer om vi inte frigör det minne som vi allokerat med malloc(). Minnesläckor kan orsaka systemhaveri om minnet tar slut. Minnesläckan försvinner när programmet terminerar. Pekare och Arrayer/VK 20

Hitta minnesläckor Vi kommer använda en minnes analysator DrMemory (http://www.drmemory.org/) DrMemory ersätter standard biblioteket, och analyserar anrop till malloc() och free(). Pekare och Arrayer/VK 21

[DrMemory-exempel]