Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3
|
|
- Axel Bengtsson
- för 6 år sedan
- Visningar:
Transkript
1 Grundläggande C-programmering del 3 Ulf Assarsson Läromoment: Grundläggande C-programmering del 3 enum, union, byte-adressering med unions, include-guards Pekare och arrayer, 2D-arrayer dubbelpekare Kopplat.ll: Lab 5 - spelprogrammering Läsanvisningar: Översiktligt: STM32F407 reference manual s:
2 C synlighet för deklara.oner Alla deklara.oner (variabler, funk.oner) och även usryck som typedefs + defines är synliga först nedanför dem ej ovanför dem. Källkodsfiler processas uppifrån och ned. Exempel: void fkn1(short param) if( ) return fkn2('a'); // fkn2 är här ännu okänd för C-kompilatorn så detta ger // kompileringsfel. return; void fkn2(char c) return; FortsäSning Pekare/VK 2
3 C synlighet för deklara.oner Alla deklara.oner (variabler, funk.oner) och även usryck som typedefs + defines är synliga först nedanför dem ej ovanför dem. Källkodsfiler processas uppifrån och ned. Exempel: void fkn2(char c); // Fix för att göra deklarationen av fkn2 känd redan här. // Vi får ha med deklarationen hur många ggr vi vill void fkn1(short param) void fkn2('a'); // Vi kan även lägga den här istället if( ) void fkn2('a'); // eller här return fkn2('a'); // Här är nu fkn2 känd return; void fkn2(char c) // Definitionen av fkn2 return; FortsäSning Pekare/VK 3
4 Preprocessor direc.ves - #if, #ifdef, #ifndef Preprocessor condi.onal inclusion #define X 1 // syntax: #define [identifier name] [value], där [value] är optional #if X == 0 // syntax: #if <value>, där 0=false och!0==true // any C-code #elif X-1 == 1 // betyder else if #else #endif #if 0 // bra för att temporärt kommentera bort stora block av kod. // any C-code #endif #define HW_DEBUG #ifdef HW_DEBUG // any C-code, t ex: #undef SIMULATOR #endif void delay_500ns(void) #ifndef SIMULATOR delay_250ns(); delay_250ns(); #endif FortsäSning Pekare/VK 4
5 Enumera.ons enum enum type_name value1, value2,..., valuen ; // type_name optional. By default, value1 = 0, value2 = value1 + 1, etc. enum type_name value1 = 0, value2, value3 = 0, value4 ; // helt OK. // Ger dock med gcc värdena: 0, 1, 0, 1 vilket kanske är ointuitivt. enum day monday=1, tuesday, wednesday, thursday, friday, saturday, sunday; enum day today; today=wednesday; printf("%d:th day",today+1); // output: "4:th day" typedef enum false, true bool; bool ok = true; #define B_E 0x40 // GPIO-portexemplet med enums #define B_RST 0x20 #define B_CS2 0x10 #define B_CS1 8 #define B_SELECT 4 #define B_RW 2 #define B_RS 1 graphic_ctrl_bit_clear( B_RS B_RW ); Kan bytas ut mot: enum B_RS=1, B_RW=2, B_SELECT=4, B_CS1=8, B_CS2=0x10, B_RST=0x20, B_E=0x40; 5
6 Bonus Type Union Union allows to store different data types in the same memory loca.on. Same syntax as struct union opt_name int a; char b; float c; x; x.a = 4; x.b = 'i'; x.c = 3.0; &x.a == &x.b == &x.c a, b och c delar samma minnesadress. D v s samma minnesadress kan adresseras på tre olika säs via tre olika variabelnamn. typedef union float v[2]; struct float x,y;; Vec2f; Vec2f pos; pos.v[0] = 1; pos.v[1] = 2; pos.x = 1; pos.y = 2; Exempel: pos.v[0] och pos.x är samma sak. pos.x visar tydligt as det är x-koordinaten vi adresserar. pos.v[i] är dock användbart om vi vill skriva en loop över x- och y-koordinaten. Tex: Vec2f addvec(vec2f a, Vec2f b) for(i=0; i<2; i++) a.v[i] += b.v[i]; return a; 6
7 Endian Big endian / LiSle endian Vi använder lisle endian. ARM Cortex-m4 klarar båda. Kodningskonven.oner/VK 7
8 Byte-adressering med unions för GPIO-porten // GPIO typedef struct _gpio uint32_t moder; uint32_t otyper; uint32_t ospeedr; uint32_t pupdr; union uint32_t idr; struct byte idrlow; byte idrhigh; ; ; union uint32_t odr; struct byte odrlow; byte odrhigh; ; ; GPIO; #define GPIO_D (*((vola.le GPIO*) 0x40020c00)) #define GPIO_E (*((vola.le GPIO*) 0x )) GPIO Input Data Register (IDR) offset mnemonic 0x10 RESERVERADE r r r r r r r r r r r r r r r r IDR 0x11 0x10 Bitar 16 tom 31 används inte och ska hållas vid sitt RESET-värde, dvs 0. Nu kan idrhigh adresseras med: byte c = GPIO_E.idrHigh; Istället för med: byte c = *((byte*)&(gpio_e.idr) + 1)); ES.ll exempel: GPIO_E.odrLow &= ( ~B_SELECT & ~x); Istället för: *((byte*)&(gpio_e.odr)) &=(~B_SELECT & ~x); FortsäSning Pekare/VK 8
9 Include guards Include guards används för as automa.skt undvika as inkludera en.h-fil mer än en gång per.c-fil. DeSa kan annars hända om en.c-fil inkluderar flera.h-filer som i sin tur inkluderar samma.h-fil. FortsäSning Pekare/VK 9
10 Include guards // main.c #include "player.h" #include "enemies.h" // vecmath.h #ifndef VECMATH_H #define VECMATH_H // player.h #ifndef PLAYER_H #define PLAYER_H // enemies.h #ifndef ENEMIES_H #define ENEMIES_H void main() typedef struct union int v[2]; struct int x, y;; ; Vec2i; #include "vecmath.h" void moveplayer(vec2i v); #endif //PLAYER_H #include "vecmath.h" void moveenemy(int i, Vec2i v); #endif //ENEMIES_H Vec2i add2i(vec2i a, Vec2i b); c-fil char isequal(vec2i a, Vec2i b); #endif //VECMATH_H Vi bör ha include-guards på alla.h-filer även om det i desa exemplet inte behövs för player.h samt enemies.h Utan include guards så inkluderas vecmath.h två gånger för main.c. Andra gången kommer kompilatorn klaga på as Vec2i redan är definierad..c-filer kompileras var för sig. Preprocessorn och kompilatorn exekveras individuellt per.c-fil. 10
11 Bonus C non-standard extensions Följande finns som extensions.ll C Stöds typiskt inte alls i C++ Dessa stöds i C99 men typiskt ej i C89 / C11 (möjligen som op.onal för kompilaror-.llverkaren). FortsäSning Pekare/VK 11
12 C nested/local func.ons are compilerop.onal extensions to C Bonus VC++ (dvs Visual Studio C++) och GNU C++ stödjer inte lokala funk.oner. Det gör däremot ARM-gcc och MinGW-gcc. void fkn(double a, double b) double square (double z) return z * z; return square (a) + square (b); FortsäSning Pekare/VK 12
13 C nested/local func.ons are compilerop.onal extensions to C Bonus VC++ (dvs Visual Studio C++) och GNU C++ stödjer inte lokala funk.oner Det gör däremot ARM-gcc och MinGW-gcc. void main() void fkn(int *array, int offset, int size) int access (int *array, int index) return array[index + offset]; int i; for (i = 0; i < size; i++) access (array, i); int a[] = 1,2,3,4,5, offs=0, size = 5; fkn(a, offs, size); Den lokala funk.onen har t.o.m..llgång.ll omgivande scope s hizlls deklarerade variabler. FortsäSning Pekare/VK 13
14 Bonus C99 variable-length arrays (Op.onal in C11) void fkn(int len) char str1[10]; // längd känd i compile time. char str2[len]; // längd ej känd i compile time men i run time. str2 är en variable-length array (C99) FortsäSning Pekare/VK 14
15 Bonus C99 struct ini.a.on med.medlem, Initiering med.medlem =... tillåter oss att endast initiera valfria medlemmar. Exempel: struct Tst int a; char b; ; struct Tst x1 =.b = 'z' ; // ofullständig initiering struct Tst x2 =.b = 'z,.a = 5 ; // initiering i valfri ordning struct Tst x3 =.a = 5,.b = 'z' ; // initiering i valfri ordning FortsäSning Pekare/VK 15
16 Varför pekare? #include <stdlib.h> void inc(int x, char y) x++; y++; Några exempel: Skriva.ll / Läsa från portar Indexera fortare i arrayer Slippa kopiera inputparametrar Ändra inputparametrarna Pekare.ll funk.oner -> objektorienterad s.l #include <stdlib.h> void inc(int *x, char *y) (*x)++; (*y)++; Argumenten är pass-by value i C. int var1 = 2; char var2 = 7; inc(var1, var2); var1 och var 2 har for arande värdena 2 resp 7 eer funk.onsanropet Argumenten är pass-by value i C. int var1 = 2; char var2 = 7; inc(&var1, &var2); var1 och var 2 har nu värdena 3 resp 8 eer funk.onsanropet Introduk.on C-programmering 16
17 Array - Likhet med pekare Har en adress och en typ. char s2[] = "Emilia"; - sizeof(s2) == 7 - Men sizeof(char*) == 4; Indexering har samma resultat. char* s1 = "Emilia"; char s2[] = "Emilia"; s1[0] = E ; s2[0] = E ; *s1 == E ; *s2 == E ; // eersom s2 är adress så kan vi dereferera den // precis som för en pekare Pekare och Arrayer/VK 17
18 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äss.ll *(x+y) och är alltså es säs as dereferera en pekare. Pekare och Arrayer/VK 18
19 char* s1 = "Emilia"; char s2[] = "Emilia"; Skillnader mellan array och pekare Arrayer s2 är symbol och kan ej ändra värde. Värdet är s2 s adress i minnet. Adress känd i compile-.me. Storlek känd i compile-.me. Storlek för pekare är storlek på adress vilket är 4 bytes på 32-bitssystem. Pekar-aritme.k möjligt men ej as försöka ändra symbolens värde. char a[] = hej ; a++ ej OK (a+1)[0] helt OK. a är en symbol för adressen.ll h. char* p = a; p är en variabel som går as ändra och här säss.ll a, dvs adressen för h. Pekare och Arrayer/VK 19
20 Array (Fält) #include <stdio.h> #include <conio.h> char * s1 = "Emilia"; // s1 är pekare. Variabeln s1 är en variabel som går att ändra, och vid start tilldelas värdet av adressen till 'E : char s2[] = "Emilia"; // s2 är array. Värdet på symbolen s2 är känt vid compile time. Symbolen s2 är konstant, dvs ingen variabel som går att ändra. Är adressen till 'E. 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] ); // pekararitmetik går även utmärkt för s2 printf("'l' i Emilia (version 3): %c \n", *(s2+3) ); printf("'l' i Emilia (version 3): %c \n", (s2+3)[0] ); char a[] = "hej"; (a+1)[0] = 'o'; char* p = a; p = "bye"; // funkar. Strängen bye" allokeras i compile time i strängliteralminne. char b[10]; // b blir 10 element stor och får adressvärde // b = "då"; // här försöker vi ändra b's värde och det GÅR inte. printf("%s\n", p); return 0; 20
21 Arrayer som funk.onsargument blir pekare void foo(int pi[]); void foo(int *pi); [ ] nota.onen finns, men betyder pekare! Undviker as hela arrayen kopieras. Längd inte all.d känd i compile.me. Adressen.ll arrayen läggs på stacken och accessas via stackvariabeln pi. (En struct kopieras och läggs på stacken). Pekare och Arrayer/VK 21
22 Antal bytes med sizeof() #include <stdio.h> char* s1 = "Emilia"; char s2[] = "Emilia"; sizeof är en inbyggd operator i C som returnerar storlekten hos typen i antal bytes. 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): Sizeof utvärderas i compile-.me. En (av få) undantag där arrayer och pekare är olika. Pekare och Arrayer/VK 22
23 Array av pekare #include <stdio.h> char* fleranamn[] = "Emil", "Emilia", "Droopy"; int main() printf("%s, %s, %s\n", fleranamn[2], fleranamn[1], fleranamn[0]); return 0; Droopy, Emilia, Emil sizeof(fleranamn) = 12; // 3*sizeof(char*) = 3*4 = 12 Pekare och Arrayer/VK 23
24 Array av arrayer #include <stdio.h> char kortanamn[][4] = "Tor", "Ulf", "Per"; int main() printf("%s, %s, %s\n", kortanamn[2], kortanamn[1], kortanamn[0]); return 0; Per, Ulf, Tor sizeof(kortanamn) = Pekare och Arrayer/VK 24
25 Array av arrayer #include <stdio.h> int arrayofarrays[3][4] = 1,2,3,4, 5,6,7,8, 9,10,11,12 ; int main() int i,j; for( i=0; i<3; i++) printf("arrayofarray[%i] = ", i); for ( j=0; j<4; j++) printf("%i ", arrayofarrays[i][j]); printf("\n"); return 0; FortsäSning Pekare/VK 25
26 Pekare.ll pekare (dubbelpekare) char *p1, *p2, *p3; char **pp; pp = &p1; Pointer Pointer Variable address address value // Annat exempel. Funktion som allokerar minne dynamiskt, t ex för elaka fiender i ett spel void allocateenemyarray(struct Enemy **pp, int n) *pp = (struct Enemy *)malloc(n * sizeof(struct Enemy)); int main() struct Enemy *penemies = NULL; allocate(&penemies, 100); // Game logic free(penemies); Ska funk.onen kunna uppdatera argumentet måste vi skicka in adressen för argumentet (istället för värdet på argumentet) Jämför med: void inc(int *x, char *y) (*x)++; (*y)++; int var1 = 2; char var2 = 7; inc(&var1, &var2); 26
27 Pekare.ll pekare (dubbelpekare) #include <stdio.h> #include <conio.h> char* s1 = "Emilia"; // variabeln s1 är en variabel som går att ändra, och vid start tilldelas värdet av adressen till 'E': char s2[] = "Emilia"; // värdet på s2 känt vid compile time. s2 är konstant, dvs ingen variabel som går att ändra. Är adressen till 'E. int main() char** pp; char* p = s1; // == &(s1[0]) pp = &p; *pp = s2; // ändrar p till s2 **pp = 'A'; // ändrar s2[0] till 'A' printf("%s\n", p); return 0; Pekare och Arrayer/VK 27
28 Dubbelpekare. Exempel int main() char s1[] = "Emilia"; char **pp, *p; -- MODIFIERA s1 via dubbelpekaren pp--- printf("s1 = %s", s1); return 0; Om ni är klara gör trippelpekare etc Kodningskonven.oner/VK 28
29 Dubbelpekare. Lösning int main() char s1[] = "Emilia"; char **pp, *p; p = &s1[0]; // p = adressen till 'E' // eller p = s1; // dvs p pekar på arrayen s1. pp = &p; **pp = 'A // eller (*pp)[0] = 'A'; *(*pp + 2) = 'e'; // pp pekar på pekaren p // dubbel avreferering av "pp som pekar på p som pekar på 'E'". // *pp pekar på p. Så det blir: p[0] = 'E' // *(p + 2). Dvs innehållet i (p + 2) tilldelas 'e. printf("s1 = %s", s1); getch(); return 0; Kodningskonven.oner/VK 29
30 Övningsuppgier om ni vill Skriv ned en struct Definiera en struct. Accessa en structmedlem via en pekare till structen. Dvs -> -notation. Skriv en funktion som clear:ar en variabel (sätter den = 0) så att man kan skriva t ex int a; clear(a); Skriv ned en union (som innehåller en enum) Vad är skillnaden mellan char* str = hej ; resp. char str[] = hej ; Skapa en funktionspekare till en funktion som tar en int-parameter och returnerar en float. Anropa funktionen och tilldela värdet till variabel a. 30
Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volafle, #define Arrayer av pekare, arrayer av arrayer Hemuppgi9er: v2. Föregående
Läs merGrundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Läs merGrundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson
Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson Läromoment: Synlighet static, #extern, (inline), #if/#ifdef, #include guards, enum, union, little/big
Läs merGrundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Läs merFortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Läs merFortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Läs merProgrammering av inbyggda system. Pekare och Arrayer. Viktor Kämpe
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...
Läs merProgrammering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe
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];
Läs merUlf Assarsson. Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C.
Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C Ulf Assarsson Läromoment: Kodningskonven(oner Real(dsloop Överkurs: grafikloop, fraktalt berg
Läs merRepetition C-programmering
Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition
Läs merIntroduktion C-programmering
Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
Läs merDet finns många flaggor till g++,
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.
Läs mer2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursens hemsida: http://www.nada.kth.se/kurser/kth/2d1387 Varför vill
Läs merÖvning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver
Läs merFöreläsning 10. Pekare (Pointers)
Föreläsning 10 Pekare (Pointers) Dagens kluringar int a=5; int f(int b) a--; b++; return b; int main() int a=3; printf("%d,",f(a)); printf("%d",a); return 0; int f(int a) if(a==1) return a; else return
Läs merPekare och arrayer. Indexering och avreferering
Pekare och arrayer En array är ett sammanhängande minnesområde rymmande ett antal element av en viss typ. Arraynamnet kan ses som adressen till arrayens början, dvs. dess första element. En pekare är en
Läs merC++-programmets beståndsdelar
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
Läs merProgrammering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,
Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1 Tisdagen den 7 juni 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman inom C programmering.
Läs merStructs och funktionspekare
Grundläggande C-programmering del 3 Structs och funktionspekare Ulf Assarsson Läromoment: Structs, pekare till structs (pilnotation), array av structs, Portadressering med structs Funktionspekare, structs
Läs merUlf Assarsson. Grafisk display + seriekommunika3on (USART) Läromoment: USART Grundläggande C-programmering del 2
Grafisk display + seriekommunika3on (USART) Ulf Assarsson Läromoment: USART Grundläggande C-programmering del 2 Pekare portadressering med structs structs med funk.onspekare Kopplat.ll: Arbetsbok avsni5:
Läs merByggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
Läs merPoster ( structar ) Postdeklarationer
Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Läs merAtt använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
Läs mergrundläggande C++, funktioner m.m.
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel Ett enkelt program i C++, hello.cpp #include
Läs merFunktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare
Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.
Läs merArrays (indicerade variabler) Föreläsning 6
Arrays (indicerade variabler) Föreläsning 6 Dagens kluring int i; scanf("%d", &i); switch(i) case 1: printf("1"); case 2: printf("2"); case 3: printf("3"); break; case 4: printf("4"); break; case 5: printf("5");
Läs merProgrammering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33
Programmering i C++ EDA623 Typer EDA623 (Föreläsning 4) HT 2013 1 / 33 Typer Innehåll Heltalstyper Flyttalstyper Pekare Minnesallokering Funktionspekare Typdeklarationer med typedef Typomvandlingar (casting)
Läs merAssemblerprogrammering för ARM del 3
Assemblerprogrammering för ARM del 3 Ur innehållet Fält och sammansatta typer (poster) Pekarvariabler och pekarkonstanter Pekararitmetik, operationer på fält Läsanvisningar: Arbetsbok kap 2 Quick-guide,
Läs merEtt enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1
Ett enkelt program i C++, hello.cpp C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel int
Läs merKapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++
Kapitel 1 Grunderna i C++ Kapitel 1 grunderna i C++ C++-programmets beståndsdelar Datatyper Funktioner och funktionsanrop Sammansatta datatyper Pekare, aritmetik och referenser Minneshantering, preprocessorn
Läs merArrays (indicerade variabler) Föreläsning 4
Arrays (indicerade variabler) Föreläsning 4 Dagens kluring Hitta felet (ska skriva ut 10,9,8,7,6,5,4,3,2,1): int n; for(n=10;n0;n--) for(m=0;m
Läs merAgenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då
Agenda Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer Övningar nu och då 1 Motivering I de flesta problem ingår att hantera multipla data I de
Läs mer#include <stdio.h> #include <string.h>
#include #include void fun(char s[]) int i=-1; while(s[++i]!=0) if('a'
Läs merLösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Omtentamen i Programmering C, Fri, Kväll, 050108.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Denna tenta kommer att vara färdigrättad Fr 14/1 och kan då hämtas på mitt tjänsterum,
Läs merLite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
Läs merInnehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merTentamen *:58/ID100V Programmering i C Exempel 3
DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst
Läs mer2 Pekare och dynamiska variabler.
2 Pekare och dynamiska variabler. När man definierar en variabel reserverar man samtidigt minne för variabelns värde. Detta minnesutrymme kommer man sedan åt med hjälp av variabelns namn. Definierar man
Läs merDagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 12 Filhantering Funktionsbibliotek Mer om kompilering Lagrinsklasser Makron Programmeringsteknik VT05 2 Mer om printf Utskrifter
Läs merDynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar
Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden
Läs merÖvning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning
Övning 3 i 2D1324 Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Avancerad c-programering och repetition Typisk h-fil #ifndef special_a
Läs merEn kort text om programmering i C.
En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,
Läs merProgrammeringsteknik för Ingenjörer VT06. Föreläsning 10
Programmeringsteknik för Ingenjörer VT06 Föreläsning 10 Dagens föreläsning Repetition Strukturer Programmeringsteknik för ingenjörer, VT06 2 Deklaration: char name1[10]; char *name2; Repetition - Strängar
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Läs merTDDC76 - Programmering och Datastrukturer
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
Läs merProgrammering av inbyggda system. Kodningskonventioner. Viktor Kämpe
Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK
Läs merKompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Läs merProgrammera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Läs mer4 Sammansatta datatyper
4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara
Läs mer2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursassistent: Mårten Björkman,
2D1387, Programsystemkonstruktion med C++ 01/02 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursassistent: Mårten Björkman, celle@nada.kth.se Kursens hemsida:
Läs merTypkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
Läs merProgrammering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012
Programmering, grundkurs, 8.0 hp HI1024, TEN1 Fredagen den 2 mars 2012 Tentamen består av två delar, del A och del B. Del A innehåller 4 kryssfrågor på olika teman inom C programmering. Varje fråga är
Läs merstruct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };
struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ Vad är problemet? Att kunna lagra data som avser flera olika egenskaper
Läs merBMI = (vikt i kg) / (längd i m) 2. Lösningsförslag
HI1024 TEN2 2013-10-28 Betygsgränser: Fx-8, E-9, D-11, C-12, B-14, A-16 (MAX-18) Generella rättningsnormer: Mycket dåliga variabelnamn ger -1p totalt på provet vid andra tillfället Inga eller dåliga kommentarer
Läs merProgrammering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,
Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1 Fredagen den 11 mars 2011, 13.15 17.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika
Läs merPekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe
Pekare och Arrayer Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Här jag jag lagt upp eb något större projekt som är programmerat i C, så ab ni kan se eb mer realisgskt exempel på
Läs merInnehåll. Pekare Syntax
Innehåll EDAF30 Programmering i C++ Typer, pekare Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typer och arrayer Operatorn -> Typer, pekare 2/1 Påminner om referenser i Java, men en pekare är minnesadressen
Läs merInnehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Läs merLösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,
Läs mer6.1 Kompilering och lite grundläggande information
6 Förhoppningsvis ska de C-konstruktioner som gås igenom här tillsammans med de exempelprogram som ges här och i andra delar av lab-pm vara tillräckliga för att ni ska kunna klara av laborationerna. Syftet
Läs merProgrammering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Läs merExempel ( )
Exempel Antag att vi vill ha en generell stack. En stack är en mekanism som man kan lagra i och hämta från enligt principen sist in, först ut (eng LIFO). Man skall alltså kunna Skapa en stack Lägga värden
Läs merIndexerade variabler
Indexerade variabler Vad har vi lärt oss så här långt Den första sammansatta (compound) datatypen: matris. Att arbeta med 1-dimensionella matriser. Att arbeta med flerdimensionella matriser. Matriser med
Läs mer*Pekarvärden *Pekarvariabler & *
*Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)
Läs merFöreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Läs merint (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int
Pekare char v[10]; //array med 10 characters char* p; //pekare till characters //p pekar på v's fjärde element p = &v[3] p & är "adressen-av" operatorn. För de flesta typer T gäller att T* är typpekare.
Läs merProgrammering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman
Läs merPekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare
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
Läs merJohan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen
Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för
Läs merHantering av textsträngar och talsträngar. William Sandqvist
Hantering av textsträngar och talsträngar Strängen Hello world! PIC-processorerna lagrar strängkonstanter med bokstäverna inbakade i en följd av instruktioner (en tabell). Man hämtar en bokstav genom att
Läs merGU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167
GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,
Läs merFöreläsning 11. Strängar
Föreläsning 11 Strängar Dagens kluring void findmax(int v[], int length, int *pmax) int i;??=v[0]; for(i=1;i< length;i++) if(v[i]>??)??=v[i]; int main() int a[]=1,2,3,4,2; int max; hittamax(a,5,???); printf(
Läs merTDDC77 Objektorienterad Programmering
TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om
Läs merGrunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY
Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade
Läs merFörsta exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,
Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, 2003 09 11 Ronnie Johansson, rjo@nada.kth.se Vi kommer att titta på: Kompilering och länkning make och Makefile Preprocessordirektiv main() funktionen
Läs merDatatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Läs merIS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1
IS1200 Datorteknik Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1 1 4.1 Little och big endian 2 Nios II? Nios II är Little-endian (men eftersom det är en soft-processor
Läs merSkriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
Läs merGrundläggande C-programmering
Grundläggande C-programmering - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, typedef, #define, struct, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer,
Läs merTillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
Läs merTentamen Grundläggande programmering
Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:
Läs merAssemblerprogrammering, ARM-Cortex M4 del 3
Assemblerprogrammering, ARM-Cortex M4 del 3 Ur innehållet: Fler pekartyper Användning av stacken Lagringsklasser, synlighet - lokala variabler Funktioner - returvärden och parametrar Läsanvisningar: Arbetsbok
Läs merProgramsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 1 Daniel Aarno bishop@kth.se Översikt övning 1 Kompilering och länkning Makefile Preprocessordirektiv Funktioner Funktionen main() Datatyper Minneshantering Pekare
Läs merTDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
Läs merFunktioner och programstruktur. Föreläsning 5
Funktioner och programstruktur Föreläsning 5 Dagens kluring int v[10]=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i
Läs merInnehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Läs merProgrammering av grafisk display
Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, s. 86-96. Datablad LCD Grafisk under resurser på kurshemsidan, s.14-23. Lab 3 - Drivrutiner - Enkel grafik Lab 5
Läs merC++ - En introduktion
C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna
Läs merGrundläggande C-programmering del 1 - För maskinorienterad programmering
Grundläggande C-programmering del 1 - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer, Läromoment för hemuppgifterna
Läs merFöreläsning 6: Metoder och fält (arrays)
TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden
Läs merGrundläggande C-programmering del 1 - För maskinorienterad programmering
Grundläggande C-programmering del 1 - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer, Läromoment för hemuppgifterna
Läs merDemonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3
LCD Display och Grafik Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3 Målsättning: Efter lektionen ska alla självständigt kunna slutföra
Läs merC-programmering del 4. Ulf Assarsson. extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg
C-programmering del 4 Ulf Assarsson Läromoment: extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg Kopplat.ll: Lab 5 - spelprogrammering Kombinera C och assembler Anropa assembler-ru.ner
Läs merFiler och structer Del 2
Filer och structer Del 2 Agenda: Typedef Alternativ strängläsning från fil Binära data Lagra Läsa Oväntat slut på input Spara till nästa programstart Typedef Kan användas till att sätta ett eget namn på
Läs merTDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne
Läs merTillämpad programmering
Tillämpad programmering C++ make, configure och arrayer Johan Montelius 1 C++ sndcopy.cc #include #include sndreader.h #incldue sndwrite.h int main(int argc, char *argv[]) { 2 C++ sndreader.h #include
Läs merFöreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
Läs mer