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

Relevanta dokument
Programmering av inbyggda system. Pekare och Arrayer. 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

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

Repetition C-programmering

Det finns många flaggor till g++,

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

Introduktion C-programmering

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

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

Att använda pekare i. C-kod

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Föreläsning 10. Pekare (Pointers)

Pekare och arrayer. Indexering och avreferering

2 Pekare och dynamiska variabler.

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

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

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

Operativsystem (IS1350) :00-12:00

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

Föreläsning 5: Introduktion av pekare

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

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

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

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

*Pekarvärden *Pekarvariabler & *

TDIU01 - Programmering i C++, grundkurs

Assemblerprogrammering för ARM del 3

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

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

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

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

TDDD78 Objektorientering: Lagring och livstid

Innehåll. Pekare Exempel

Poster ( structar ) Postdeklarationer

Abstrakta datastrukturer

Indexerade variabler

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

Arrays (indicerade variabler) Föreläsning 6

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

F5: Högnivåprogrammering

F5: Högnivåprogrammering

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

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

Arrays (indicerade variabler) Föreläsning 4

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

TDDC77 Objektorienterad Programmering

TDIU01 - Programmering i C++, grundkurs

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

Grundläggande C-programmering

En kort text om programmering i C.

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

Innehåll. Pekare Exempel

Innehåll. Pekare Syntax

Tentamen i Programmering grundkurs och Programmering C

Objektorientering: Lagring och livstid

Tommy Färnqvist, IDA, Linköpings universitet

C++-programmets beståndsdelar

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

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

PROGRAMMERING-Java Omtentamina

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

Operativsystem ID2200/06 omtentamen :00-18:00

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

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

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

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

4. Maskinnära programmering i C. Förberedelser till hemlaboration 1.

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Enkla datatyper minne

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

Classes och Interfaces, Objects och References, Initialization

Indicerade variabler

HI1024 Programmering, grundkurs TEN

Tentamen i. Programmering i språket C

Assemblerprogrammering, ARM-Cortex M4 del 3

Objektorienterad Programmering (TDDC77)

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

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

TDIU01 - Programmering i C++, grundkurs

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering

Objektorienterad Programmering (TDDC77)

Tentamen i Programmering grundkurs och Programmering C

C++ Lektion Tecken och teckenfält

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

Tillämpad programmering

Imperativ programmering. Föreläsning 2

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

tentaplugg.nu av studenter för studenter

Transkript:

Pekare och Arrayer Ulf Assarsson Originalslides av Viktor Kämpe

Pekare Pekarens värde är en adress. Pekarens typ berä>ar hur man tolkar bitarna som finns på adressen. char str[] = "apa"; char* p = &str[0]; // = &(str[0]) *p = 'a'; Pekare och Arrayer/VK 2

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

Dereferera När vi derefererar 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 4

Pekare och Arrayer/VK 5

Operatorer #include <stdio.h> int main() { char a, b, *p; a = 'v'; b = a; p = &a; DeklaraSon 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 UtskiR: b = v, p = 0x0027F7C3 (v) b = v, p = 0x0027F7C3 (k) Pekare och Arrayer/VK 6

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

AritmeSk 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 8

[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; UtskriR: namn1: Emil namn2: Emilia sizeof(namn2): 7 Pekare och Arrayer/VK 10

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

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ä>s Sll *(x+y) och är alltså e> sä> a> dereferera en pekare. Pekare och Arrayer/VK 12

Skillnader mellan array och pekare Arrayer Adress känd i compile- Sme. Storlek känd i compile- Sme. Pekar- aritmesk inte möjlig. a[] = hej ; a++ ej OK (a+1)[0] helt OK. ORast en relasv adress. T ex 103 bytes erer första instruksonen. Pekare och Arrayer/VK 13

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 Sllräckligt stor. OBS. Funkar bara med ini8ering vid deklara8on! 10 element stor array. } return 0; UtskriR: namn1: Emil namn2: Emilia sizeof(namn2): 7 Pekare och Arrayer/VK 14

Arrayer som funksonsargument blir pekare void foo(int pi[]); void foo(int *pi); Då argument Sll funksoner bara är kända i run- Sme så kan vi inte passa arrayer. [ ] notasonen finns, men betyder pekare! Pekare och Arrayer/VK 15

[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): sizeof(char*): sizeof(s1): sizeof(s2): 1 4 4 7 Sizeof utvärderas i compile- Sme. En (av få) undantag där arrayer och pekare är olika. Pekare och Arrayer/VK 17

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

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 19

E> Programs Adressrymd Alla program som körs, har något associerat minne, vilket typiskt är indelat i: Code Segment Data Segment (Holds Global Data) Stack (where the local variables and other temporary informason is stored) Heap The Stack grows downwards Stack The Heap grows upwards Heap Data Segment Code Segment

[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 22

Hi>a minnesläckor Vi kommer använda en minnes analysator DrMemory (h>p://www.drmemory.org/) DrMemory ersä>er standard biblioteket, och analyserar anrop Sll malloc() och free(). Pekare och Arrayer/VK 23

[DrMemory- exempel]