Programmeren in C/Datatypes: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Kleuske (overleg | bijdragen)
Kleuske (overleg | bijdragen)
Regel 221:
 
Pointers zijn geen zelfstandige types. Ze komen altijd voor in combinatie met een ander type zoals ''int'', ''float'' of zelfs een ''struct'', ''array'' of zelfs een functie.
 
Een bijzonder type ''pointer'' is de ''void pointer'', een "wijzer naar niets". Dit houdt niet in dat het geheugengebied waarnaar dit type wijst leeg is, maar het type ervan is niet gespecificeerd. In de praktijk betekent dit dat elke willekeurige ''pointer'' aan een ''void pointer'' kan worden toegekend, maar dat een ''void pointer'' nooit zonder expliciete ''type-cast'' aan een ander type pointer kan worden toegekend. Het gebruik van ''void pointers'' kan daarom bijzonder handig zijn, maar (vanwege de expliciete cast) is het mogelijk hiermee zelfs het zeer tolerante type-checking systeem van ''C'' volledig buiten werking gesteld kan worden.
 
<source lang="c">
Regel 234 ⟶ 236:
char c;
char* cp; /* een pointer naar een char */
 
void* vp; /* een pointer naar een iets (wat? geen idee...). */
 
void (*funp)(void); /* een pointer naar een functie die
Regel 242 ⟶ 246:
}
</source>
 
Een bijzonder type ''pointer'' is de ''void pointer'', een "wijzer naar niets". Dit houdt niet in dat het geheugengebied waarnaar dit type wijst leeg is, maar het type ervan is niet gespecificeerd. In de praktijk betekent dit dat elke willekeurige ''pointer'' aan een ''void pointer'' kan worden toegekend, maar dat een ''void pointer'' nooit zonder expliciete ''type-cast'' aan een ander type pointer kan worden toegekend. Het gebruik van ''void pointers'' kan daarom bijzonder handig zijn, maar (vanwege de expliciete cast) is het mogelijk hiermee zelfs het zeer tolerante type-checking systeem van ''C'' volledig buiten werking gesteld kan worden.
 
Om aan te geven dat een pointer '''nergens''' naar wijst, kan een '''0''' (of, wat netter, ''NULL'') aan die pointer worden toegekend. Het resultaat ervan is dat de pointer een ''null-pointer'' wordt, een bijzondere waarde die, als de pointer wordt gevolgd (''gedereferenced'' in vakjargon) veelal in een exceptie resulteert. Officieel is dit echter niet meer dan ''undefined behavior'', ongedefinieerd gedrag. Dit verschijnsel is een veelvoorkomende oorzaak van programma-''crashes''. De representatie van een ''null-pointer'' is overigens volledig compiler afhankelijk, de enige voorwaarde die de standaard stelt is dat het geen geldige waarde voor een pointer mag zijn.
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.