1 / 20

C programmeren voor niet-C programmeurs les 4

C programmeren voor niet-C programmeurs les 4. structures pointers. structure. is een verzameling van gevens gebundeld onder 1 naam bv de gegevens van een een tentamenuitslag: int studienummer; char vak[ 16 ]; float resultaat;. /* definieer een struct type */ struct TentamenUitslag {

nolcha
Download Presentation

C programmeren voor niet-C programmeurs les 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C programmeren voor niet-C programmeursles 4 • structures • pointers Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  2. structure • is een verzameling van gevens gebundeld onder 1 naam bv de gegevens van een een tentamenuitslag: int studienummer; char vak[ 16 ]; float resultaat; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  3. /* definieer een struct type */ struct TentamenUitslag { int studienummer; char vak[ 16 ]; float resultaat; }; /* declareer variabelen van dat type */ struct TentamentUitslag uitslag1, uitslag2; /* vul uitslag1 met waarden */ uitslag1.studienummer = 1234567; strcpy( uitslag1.vak, “D4ECPT2” ); uitslag1.resultaat = 6.7; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  4. /* 1 uitslagen is een beetje weinig */ struct TentamentUitslag uitslagen[ 40 ]; /* vul uitslag N met de aangeven waarden */ void SetUitslag( int N, int *Nr, char *Vak, float Cijfer ){ uitslag[ N ].studienummer = Nr; strcpy( uitslag[ N ].vak, Vak ); uitslag[ N ].resultaat = 6.7; } SetUitslag( 10, 12345, “1COSY1”, 5.6 ); Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  5. /* maar dat kan veel mooier met een pointer! */ /* vul uitslag *X met de aangeven waarden */ void SetUitslag( struct TentamenUitslag *X; int *Nr, char *Vak, float Cijfer ){ (*uX).studienummer = Nr; strcpy( X->vak, Vak ); X->resultaat = 6.7; } SetUitslag(&uitslagen[ 10 ], 12345, “1COSY1”, 5.6 ); Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  6. malloc • reserveert een stuk geheugen voor je • dit blijft gereserveerd totdat JIJ het vrij geeft (free() call) • omvang aangeven in bytes • gebruik hievoor sizeof() • netjes: typecast het resultaat • het cruciale punt: je hoeft niet van te voren te weten hoe vaak je malloc aanroept Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  7. /* reserveer en vul een uitslag */ struct TentamenUitslag * MaakUitslag( char *Nr, char *Vak, float Cijfer ){ struct TentamenUitslag *p = (struct TentamenUitslag *) malloc( sizeof( struct TentamenUitslag) ); p->studienummer = Nr; strcpy( p->.vak, Vak ); p->.resultaat = 6.7; return p; } Dit kan je dus zo vaak aanroepen als je wilt, iedere keer krijg je een pointer terug naar een nieuw stukje geheugen! Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  8. maar …. Je weet van te voren niet hoeveel tentamenuitslagen er komen, waar moet dan je al die pointers laten? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  9. maar …. Je weet van te voren niet hoeveel tentamenuitslagen er komen, waar moet dan je al die pointers laten? • 1 pointer wijst naar de eerste uitslag, de pointer naar de volgende zet je in die uitslag! Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  10. TentamentUitslag *eerste; int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende Dit heet een gelinkte lijst int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende NULL int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  11. /* eerste een pointer type */ struct TentamenUitslag * TUP; struct TentamenUitslag { int studienummer; char vak[ 16 ]; float resultaat; TUP volgende; /* toegevoegd: pointer naar de volgende */ }; /* 1 losse pointer hebben we nodig */ struct TentamentUitslag * eerste = NULL; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  12. /* maak en alloceer een nieuwe uitslag struct */ struct TentamenUitslag * nieuwe = MaakUitslag( … ); /* hang die nieuwe uitslag vooraan in de keten */ nieuwe->volgende = eerste; eerste = nieuwe; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  13. TentamentUitslag *eerste; begin situatie int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende NULL int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  14. TentamentUitslag *eerste; TentamentUitslag *nieuwe; int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende NULL int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende struct TentamenUitslag nieuwe = MaakUitslag( … ); Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  15. TentamentUitslag *eerste; TentamentUitslag *nieuwe; int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende NULL int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende nieuwe->volgende = eerste; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  16. TentamentUitslag *eerste; TentamentUitslag *nieuwe; int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende NULL int studienummer; char vak[ 16 ]; float resultaat; TentamentUitslag *volgende eerste = nieuwe; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  17. /* een gelinkte lijst doorlopen */ struct TentamenUitslag *p; for( p = eerste; p!= NULL; p = p->volgende ){ printf( “naam = %s”, p->naam ); } Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  18. Een file lezen FILE *f = fopen( “filenaam”, “r” ); n = fscanf( f, “%s %f”, naam, &cijfer ); Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  19. Oefening 1 Maak een programma dat een reeks namen met bijbehorende cijfers inlees en opslaat in een gelinkte lijst, en vervolgens alle uitslagen van mensen wiens naam met een K begint afdrukt. Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  20. Werk voor volgende week • Lees hoofdstuk 6 • Maak natuurlijk oefening 1 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

More Related