Aanwijzers in C zijn gemakkelijk en leuk om te leren. Sommige C-programmeertaken worden gemakkelijker uitgevoerd met pointers, en andere taken, zoals dynamische geheugentoewijzing, kunnen niet worden uitgevoerd zonder pointers te gebruiken. Het wordt dus noodzakelijk om aanwijzingen te leren om een perfecte C-programmeur te worden. Laten we ze in eenvoudige en gemakkelijke stappen leren.
Zoals u weet, is elke variabele een geheugenlocatie en is voor elke geheugenlocatie een adres gedefinieerd dat kan worden benaderd met ampersand (&) operator, die een adres in het geheugen aangeeft. Beschouw het volgende voorbeeld, dat het adres van de gedefinieerde variabelen afdrukt –
Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat –
Address of var1 variable: bff5a400Address of var2 variable: bff5a3f6
Wat zijn Pointers?
Een pointer is een variabele waarvan de waarde het adres is van een andere variabele, dwz direct adres van de geheugenlocatie. Zoals elke variabele of constante, moet u een pointer declareren voordat u deze gebruikt om een variabel adres op te slaan. De algemene vorm van een pointervariabele declaratie is –
type *var-name;
Hier, type is het basistype van de aanwijzer; het moet een geldig C-gegevenstype zijn en var-name is de naam van de pointervariabele. De asterisk * die wordt gebruikt om een pointer aan te duiden, is dezelfde asterisk die wordt gebruikt voor vermenigvuldiging. In deze verklaring wordt de asterisk echter gebruikt om een variabele als pointer aan te duiden. Bekijk enkele van de geldige pointer-declaraties –
int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */
Het daadwerkelijke gegevenstype van de waarde van alle pointers, of het nu integer, float, karakter of anderszins is , is hetzelfde, een lang hexadecimaal getal dat een geheugenadres vertegenwoordigt. Het enige verschil tussen pointers van verschillende datatypes is het datatype van de variabele of constante waarnaar de pointer verwijst.
Hoe gebruik je pointers?
Er zijn een paar belangrijke bewerkingen, wat we heel vaak zullen doen met behulp van aanwijzingen. (a) We definiëren een pointervariabele, (b) wijzen het adres van een variabele toe aan een pointer en (c) krijgen uiteindelijk toegang tot de waarde op het adres dat beschikbaar is in de pointervariabele. Dit wordt gedaan door een unaire operator * te gebruiken die de waarde van de variabele retourneert die zich bevindt op het adres dat is opgegeven door de operand. Het volgende voorbeeld maakt gebruik van deze bewerkingen –
Wanneer de bovenstaande code is gecompileerd en uitgevoerd, levert dit het volgende resultaat op –
Address of var variable: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
NULL-aanwijzers
Het is altijd een goede gewoonte om een NULL-waarde toe te wijzen aan een pointervariabele voor het geval u geen exact adres heeft om toe te wijzen. Dit wordt gedaan op het moment van variabele declaratie. Een pointer waaraan NULL is toegewezen, wordt een null-pointer genoemd.
De NULL-pointer is een constante met een waarde van nul die is gedefinieerd in verschillende standaardbibliotheken. Beschouw het volgende programma –
#include <stdio.h>int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0;}
Wanneer de bovenstaande code is gecompileerd en uitgevoerd, levert dit het volgende resultaat op –
The value of ptr is 0
In de meeste besturingssystemen mogen programmas geen toegang krijgen tot geheugen op adres 0 omdat dat geheugen is gereserveerd door het besturingssysteem. Het geheugenadres 0 heeft echter een speciale betekenis; het geeft aan dat de aanwijzer niet bedoeld is om naar een toegankelijke geheugenlocatie te wijzen. Maar volgens afspraak, als een pointer de null-waarde (nul) bevat, wordt aangenomen dat deze naar niets wijst.
Om te controleren op een null-pointer, kunt u een “if” -instructie als volgt gebruiken –
if(ptr) /* succeeds if p is not null */if(!ptr) /* succeeds if p is null */
Pointers in detail
Pointers hebben veel maar eenvoudige concepten en ze zijn erg belangrijk voor C-programmering. De volgende belangrijke aanwijzerconcepten zouden voor elke C-programmeur duidelijk moeten zijn:
Sr.No. | Concept & Beschrijving |
---|---|
1 | Pointer rekenkunde
Er zijn vier rekenkundige operatoren die gebruikt kunnen worden in pointers: ++, -, +, – |
2 | Array of pointers
Je kunt arrays definiëren om een aantal pointers te bevatten. |
3 | Pointer to pointer
Met C kunt u een aanwijzer op een aanwijzer hebben, enzovoort. |
4 | Wijzers doorgeven aan functies in C
Doorgeven een argument door middel van referentie of adres maakt het mogelijk dat het doorgegeven argument kan worden gewijzigd in de aanroepende functie door de aangeroepen functie. |
5 | Return pointer van functies in C
C staat een functie toe om een pointer terug te sturen naar de lokale variabele, statische variabele en ook dynamisch toegewezen geheugen. |