Pointers

From Frotmail Projects
Revision as of 09:37, 5 April 2022 by Eric (talk | contribs) (Created page with "Stel: we hebben een PC met 10.000 bytes werkgeheugen. Dit betekend dat we 10.000 “hokjes” kunnen vullen met een getal tussen de 0 en 255. Als we in hokje 5 het getal 128 zetten willen we dit natuurlijk ook ooit terug kunnen lezen? Int i=128 Met deze regel slaan we bijvoorbeeld 128 op in het werkgeheugen...De computer bepaald waar dit getal wordt opgeslagen en onthoud vervolgens in welk vakje de waarde van “i” wordt bewaard. Stel de waarde van i (128) wordt in...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Stel: we hebben een PC met 10.000 bytes werkgeheugen. Dit betekend dat we 10.000 “hokjes” kunnen vullen met een getal tussen de 0 en 255.

Als we in hokje 5 het getal 128 zetten willen we dit natuurlijk ook ooit terug kunnen lezen?

Int i=128

Met deze regel slaan we bijvoorbeeld 128 op in het werkgeheugen...De computer bepaald waar dit getal wordt opgeslagen en onthoud vervolgens in welk vakje de waarde van “i” wordt bewaard. Stel de waarde van i (128) wordt in hokje 0 opgeslagen. Wanneer we later de waarde van i terug willen halen moeten we dus in hokje 0 zijn.

Een karakter is in feite gewoon een nummer (ASCII waarde) zo is de waarde 10 een newline (linux enter) en de A is 65 (dacht ik)

Als je met meerdere karakters achter elkaar gaat werken heb je dus ook meerdere hokjes nodig om deze data in op te slaan. Dan wordt er gebruik gemaakt van zogenaamde pointers

Een pointer in C wordt aangegeven met een &, de inhoud van een pointer wordt aangegeven met een *

Bijvoorbeeld: char *iets=”Jan met de pet” hier wordt hokje 0 met de waarde van de hoofdletter j gevuld, hokje 1 met de waarde van a enz.

De variable iets krijgt dan te horen dat zijn string vanaf positie 0 in het geheugen is gezet. In C kan je dat “adres” ophalen/veranderen door een & voor de variable te plakken:

printf(“Het adres van *iets is %i”,&iets); (ik weet niet of dit voorbeeld kan zonder typecast)

met &iets heb je het dus altijd over het geheugenadres waar de string staat

de * geeft aan dat je het over de inhoud hebt van dat geheugenblok, dus met *iets kan je de data bekijken welke in het geheugen staat.