Gegevens: |
Geschreven door: |
Wave6 |
Moeilijkheidsgraad: |
Normaal |
Hits: |
10012 |
|
|
|
|
C++ Pointers Pointers (C++)
- Wat zijn pointers?
- Voorbeelden van pointers
- Einde
1. Wat zijn pointers ?
Pointers (aanwijzers), een pointer is een soort variabele in C++ die naar een geheugenadres verwijst.
In die pointer sla je dus een geheugenadres op. Het is te verglijken met een postcode elk huis
heeft een eigen postcode.
Die postcode zorgt ervoor dat de postbode precies weet in welke straat/beinum/gedeelte jij van jou stad woont.
Zo zit het ook met pointers het zorgt ervoor dat je direct met het geheugen kan communiceren.
Stel je declareerd 3 integers zoals hieronder.
#include <iostream>
using namespace std;
int main()
{
int x=23;
int y=45;
int z=89;
return 0;
}
|
Dan komt dat zo in het geheugen te staan.
Adressen |
Inhoud |
Variabelenaam |
400 |
23 |
x |
401 |
402 |
45 |
y |
403 |
404 |
89 |
z |
405 |
Zoals je hier ziet is een pointer dus eigenlijk niets meer dan een verwijzing naar een geheugenadres.
Maar wat is nu precies het nut van pointers? Nou dat zal ik je vertellen.
Zoals je waarschijnlijk weet is C++ een LOW-LEVEL taal en dat wil zeggen dat het vrij dicht op de,
Machine ligt.Met behulp van Pointers is het zo bijvoorbeeld dat je direct kan communiceren met het
geheugen. en dat je niet een hele variabele overnieuw hoef te,
Typen. Maar dat je de naam van de pointer bijvoorbeeld opgeeft. Dit is even wat simpeler uitgelegd.
Maar zo kom je wel achter het doel van een pointer (hoop ik).
Echter zijn er wel nadelen van pointers. Zo is het dat als je een pointer wijzigt je niet zomaar
een andere voor in de plaats kan zetten.
Heb je het bijvoorbeeld in een Lus staan dan kan dat een een geheugenlek opleveren.
Soms geeft de Compiler hiervoor dan ook een error aan.
2. Voorbeelden van pointers
#include <iostream>
using namespace std;
int main()
{
int x = 34;
int y = 86;
float a = 5;
float b = 9;
cout << "De geheugenadressen van de 2 integers zijn:"
<< endl;
cout << "int x =" << &x << endl;
cout << "int y =" << &y << endl;
cout << "De geheugenadressen van de 2 floats zijn:"
<< endl;
cout << "float a=" << &a << endl;
cout << "float b=" << &b << endl;
cin.get();
return 0;
}
|
Je ziet het bovenstaande script, in dat script zie je dit &a staan die & is een
Adresoperator met die operator kun je het geheugenadres opvragen. Dus in dit geval cout << &a <<
Daar vraagt die dus het geheugen adres op van float a.
Het is leerzaam om het programma te compileren en het te bekijken.
Aan het verschil van de adressen kun je namelijk zien
hoe verschillende type variabele verschillende hoeveelheden geheugenruimte in beslag nemen.
Als we bijvoorbeeld aannemen dat de output van het programma er zo uit ziet:
De geheugenadressen van de twee integers:
Int x = 0x8e54fff4
Int z = 0x8e54fff2
De geheugenadressen van de twee floats:
Float a = 0x8e54ffee
Float b = 0x8e54ffea
Met een klein beetje inzicht zul je zien dat een integer uit 2 bytes bestaat en een float uit 4 bytes
Hier heb ik een klein voorbeeldje van hoeveel byte elke variabele in beslag neemt.
integer = 2 bytes
float = 4 bytes
long = 4 bytes
double = 8 bytes
Nu hebben we dus het opvragen gehad van de geheugenadressen.
Maar nu willen we ze natuurlijk ook kunnen opslaan en daar heeft C++ een soort variabele voor
en die heet nou een Pointer. Met die pointer verwijs je dus naar een geheugenadres.
Word het allemaal al wat duidelijker?
Goed, hieronder een klein voorbeeldje van het opslaan van zo'n geheugenadres.
#include <iostream>
using namespace std;
int main()
{
int a = 4;
int b = 9;
cout <<"Adressen:" <<endl;
cout <<"int a =" << &a <<endl;
cout <<"int a =" << &b <<endl;
int *c = &a;
int *d = &b;
cout<<"Pointers:"<< endl;
cout <<"Pointer van adres A = "<< c << endl;
cout <<"Pointer van adres B = "<< d << endl;
return 0;
}
|
Zo nu gaan we even een kijkje nemen naar het bovenstaande script.
Je ziet dat er een nieuw tekentje in staat en dat is * het sterretje.
Met dat tekentje geef je aan dat het een Pointer word zoals in het bovenstaande scriptje.
Ook bij dit script is het handig en vooral leerzaam om het te compileren en er even naar te kijken.
Je ziet dat. Ik eerst 2 integers ga declareren. Met de waardes 4 en 9. vervolgens vraag ik het
geheugenadres op van die 2 integers. En daarna maak ik 2 pointers aan D.M.V het sterretje.
En dan vraag ik de pointers op.
Je zult in het programma snel opvallen dat de pointers de waardes van a en b hebben
Handig toch?
3. Einde
Zo dit was mijn tutorial over pointers. Mocht er iets niet duidelijk zijn of heb jij tips of ideeën
Laat dan maar een berichtje achter of PM me maar. Let op! Opbouwende kritiek is welkom maar vage en ruige
reacties heb ik niks aan. ik ben ook maar een mens die dingen fout kan doen. dus wees een beetje rieel:)
©Wesley vd Meer en www.sitemasters.be
|
|
|