const och pekare Output: char *unsafe(char *s) { // Returnerar pekare till det andra tecknet i s printf("%s \n", s);

Relevanta dokument
Symboliska konstanter const

TDIU01 Programmering i C++

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

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

C++ Objektorientering - Klasser. Eric Elfving

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

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

Introduktion C-programmering

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Tentamen EDAF30 Programmering i C++

Repetition C-programmering

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

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Avancerad SSL-programmering II

TDIU01 - Programmering i C++, grundkurs

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Poster ( structar ) Postdeklarationer

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

TDDC76 - Programmering och Datastrukturer

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Föreläsning 12. struct

Funktionens deklaration

Skizz till en enkel databas

Exempelsamling Assemblerprogrammering

Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };

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

Pekare och arrayer. Indexering och avreferering

Instuderingsfrågor, del D

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

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

TDIU01 - Programmering i C++, grundkurs

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

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

Tentamen i DD2387 Programsystemkonstruktion med C++

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

HI1024 Programmering, grundkurs TEN

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

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

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

Föreläsning 9. struct

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00

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

Synkronisering - Semaforen. Om att vänta men inte i onödan

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

Programmeringsteknik med C och Matlab

*Pekarvärden *Pekarvariabler & *

Tillämpad programmering

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

1 Logga in 1. 2 Byta lösenord 1. 3 Hemkatalog 1. 4 Unixintroduktion Viktiga kommandon Läsa 3

C++ - En introduktion

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

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

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

Innehåll. Pekare Exempel

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Innehåll. Pekare Exempel

Synlighet. Namespace Scope-operatorn Klasser Vänner

Tentamen i DD2387 Programsystemkonstruktion med C++

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Exempel ( )

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

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

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

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

Lämna in ifylld kursvärdering tillsammans med tentamen! Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Träd. Rot. Förgrening. Löv

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

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

HI1024 Programmering, grundkurs TEN

Att använda pekare i. C-kod

Tillämpad programmering

HI1024 Programmering, grundkurs TEN

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Tentamen *:58/ID100V Programmering i C Exempel 3

F8: Typkonvertering i C++

Abstrakta datastrukturer

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

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Tentamen Datastrukturer (DAT036)

Programmeringsteknik med C och Matlab

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Föreläsning 10. Pekare (Pointers)

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Fö 4 TSEA81. Monitors and Message passing

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

Föreläsning Datastrukturer (DAT036)

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

SORTERING OCH SÖKNING

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

Tentamen i DD2387 Programsystemkonstruktion med C++

Uppgifter till praktiska tentan, del A. (7 / 27)

Grundkurs Programmering

Transkript:

(6 oktober 2010 T11.1 ) const och pekare char *unsafe(char *s) { // Returnerar pekare till det andra tecknet i s s++; // OK *s = * ; // Ej säkert OK return s; char s[] = "!"; char *u; u = unsafe(s); printf("första anrop: %s \n", u); u = unsafe("!"); printf("andra anrop : %s \n", u); Output: *n t panic Första anrop: *n t panic!! Segmentation fault (core dumped)

(6 oktober 2010 T11.2 ) const och pekare forts char *safer(const char *s) { // << s++; // *s = * ; // << Skulle ge kompileringsfel return s; // << Ger varning char *sin = ""; char tin[] = ""; char *sut; char *tut; sut = safer(sin); tut = safer(tin); printf("sut: %s \n", sut); printf("tut: %s \n", tut); *sut = * ; *tut = * ; $ gcc const2.c const2.c: In function safer : const2.c:12: warning: return discards qualifiers from pointer targe $ a.exe sut: tut: Segmentation fault (core dumped)

(6 oktober 2010 T11.3 ) const och pekare forts const char *safer(const char *s) { // <<< s++; // *s = * ; return s; char *sin = ""; char tin[] = ""; char *sut; char *tut; sut = safer(sin); // << Ger varning tut = safer(tin); // << Ger varning printf("sut: %s \n", sut); printf("tut: %s \n", tut); *sut = * ; *tut = * ; $ gcc const3.c const3.c: In function main : const3.c:19: warning: assignment discards q const3.c:20: warning: assignment discards q $ a.exe sut: tut: Segmentation fault (core dumped)

const och pekare forts /* Safest */ const char *safest(const char *s) { s++; return s; char *sin = ""; const char *sut; // <<< sut = safest(sin); printf("sut: %s \n", sut); //*sut = * ; Skulle ge kompileringsfel Alltså: const framför en pekardeklaration anger att det utpekade inte får ändras (inte att pekaren inte får ändras) Använd const för att garantera att utpekade strukturer inte oavsiktligt ändras. Tag varningar på allvar! (Man kan deklarera konstanta pekare. Exempel: int * const p = q om q är en pekare eller ett arraynamn) (6 oktober 2010 T11.4 )

(6 oktober 2010 T11.5 ) Återbesök av treemap void print(tree t) { printf("contents:\n"); for (iterinit(t); itermore(t); iternext(t)) { printf("%10s = %s\n", (char *)currentkey(t), (char *)currentvalue(t)); char a[]="a", b[]="b", c[]="c", d[]="d"; Tree t = maketree((comparator)strcmp); put(t, b, "bb"); put(t, a, "aa"); put(t, d, "dd"); put(t, c, "cc"); print(t); iterinit(t); char *k = currentkey(t); strcpy(k,"urk!"); print(t); return 0; Med följande resultat: Marvin$./a.out Contents: a = aa b = bb c = cc d = dd Contents: urk! = aa b = bb c = cc d = dd Inte så bra!

(6 oktober 2010 T11.6 ) Återbesök av treemap forts Kan man förhindra att man utifrån saboterar trädet? Nej men man kan åtminstone se till att det inte sker opåtalat: typedef struct treenode { const void * key; //<<<<< void *value; struct treenode *left; struct treenode *right; treenode, *TreeNode; Marvin$ gcc -Wall -g stack.c treemap.c treemap.c: In function?putprivate?: treemap.c:33: warning: passing argument 2 of cmp discards qualifiers from pointer target type... (några till likadana) treemap.c: In function currentkey : treemap.c:93: warning: return discards qualifiers from pointer target type Ger man med lillfingret så...

(6 oktober 2010 T11.7 ) Återbesök av treemap forts I treemap.h: typedef int (*comparator)(const void *, const void *); const void *currentkey(tree t); och i treemap.c const void *currentkey(tree t) { Kompileringsförsök: Marvin$ gcc -Wall -g stack.c treemap.c treemap.c: In function main : treemap.c:128: warning: initialization discards qualifiers from pointer target type Marvin$ vilket är raden: char *k = currentkey(t);

(6 oktober 2010 T11.8 ) Återbesök av treemap forts Ändring i main: const char *k = currentkey(t); Kompileringsförsök: Marvin$ gcc -Wall -g stack.c treemap.c treemap.c: In function?main?: treemap.c:129: warning: passing argument 1 of builtin strcpy_chk discards qualifiers from pointer target treemap.c:129: warning: passing argument 1 of inline_strcpy_chk discards qualifiers from pointer target typ Marvin$ Igen: Tag varningar på allvar!