Wat is Pointer in C?
De Pointer in C is een variabele die het adres van een andere variabele opslaat. Een aanwijzer kan ook worden gebruikt om naar een andere aanwijzerfunctie te verwijzen. Een aanwijzer kan worden verhoogd / verlaagd, d.w.z. om naar de volgende / vorige geheugenlocatie te wijzen. Het doel van pointer is om geheugenruimte te besparen en een snellere uitvoeringstijd te bereiken.
Pointers gebruiken in C
Als we een variabele v van het type int declareren, zal v feitelijk een waarde opslaan.
v is nu gelijk aan nul.
Elke variabele heeft echter, behalve waarde, ook zijn adres (of, simpel gezegd, waar hij zich in het geheugen bevindt). Het adres kan worden opgehaald door een ampersand (&) voor de variabelenaam te plaatsen.
Als u het adres van een variabele op het scherm afdrukt, ziet het eruit als een totaal willekeurig getal (bovendien kan het verschillen van run tot run).
Laten we dit in de praktijk proberen met pointer in C voorbeeld
De output van dit programma is -480613588.
Wat is nu een pointer? In plaats van een waarde op te slaan, slaat een pointer het adres van een variabele op.
Pointervariabele
Int * y = & v;
VARIABEL |
POINTER |
Een waarde opgeslagen in een benoemd opslag- / geheugenadres |
Een variabele die verwijst naar het opslag- / geheugenadres van een andere variabele |
Een pointer declareren
Zoals variabelen, pointers in C progra mming moeten worden gedeclareerd voordat ze in uw programma kunnen worden gebruikt. Pointers kunnen elke naam krijgen die u maar wilt, zolang ze maar voldoen aan de naamgevingsregels van C. Een pointer-declaratie heeft de volgende vorm.
data_type * pointer_variable_name;
Hier,
- data_type is het basistype van de aanwijzer van de variabeletypes van C en geeft het type variabele aan waarnaar de aanwijzer verwijst.
- De asterisk (*: dezelfde asterisk die voor vermenigvuldiging) wat een indirecte operator is, declareert een pointer.
Laten we enkele geldige pointer-declaraties bekijken in deze C pointers tutorial:
Initialiseer een pointer
Nadat we een pointer hebben gedeclareerd, initialiseren we deze als standaardvariabelen met een variabel adres. Als verwijzingen in C-programmering niet niet worden geïnitialiseerd en in het programma worden gebruikt, zijn de resultaten onvoorspelbaar en mogelijk rampzalig.
Om het adres van een variabele te krijgen, gebruiken we de ampersand (&) operator, geplaatst voor de naam van een variabele waarvan we het adres nodig hebben. Aanwijzerinitialisatie wordt uitgevoerd met de volgende syntaxis.
Pointer-syntaxis
pointer = &variable;
Hieronder wordt een eenvoudig programma voor pointerillustraties gegeven:
Output:
Address stored in a variable p is:60ff08Value stored in a variable p is:10
Operator | Betekenis |
* | Heeft twee doelen
|
& | Heeft slechts één doel
|
Typen pointers in C
Hieronder volgen de verschillende soorten pointers in C:
Null Pointer
We kunnen een null-pointer maken door een null-waarde toe te kennen tijdens de pointer-declaratie. Deze methode is handig als er geen adres aan de aanwijzer is toegewezen. Een null-pointer bevat altijd waarde 0.
Het volgende programma illustreert het gebruik van een null-pointer:
#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}
Output:
The value inside variable p is:0
Void Pointer
In C-programmering wordt een void pointer ook wel een generieke pointer genoemd. Het heeft geen standaard gegevenstype. Een leegte-aanwijzer wordt gemaakt door het trefwoord void te gebruiken. Het kan worden gebruikt om een adres van een willekeurige variabele op te slaan.
Het volgende programma illustreert het gebruik van een void pointer:
#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}
Output:
The size of pointer is:4
Wild pointer
Van een pointer wordt gezegd dat het een wilde pointer is als hij nergens voor wordt geïnitialiseerd. Dit soort C-aanwijzers zijn niet efficiënt omdat ze kunnen verwijzen naar een onbekende geheugenlocatie die problemen kan veroorzaken in ons programma en het kan leiden tot het crashen van het programma. Men moet altijd voorzichtig zijn bij het werken met wilde wijzers.
Het volgende programma illustreert het gebruik van de wild pointer:
#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return 0;}
Output
timeout: the monitored command dumped coresh: line 1: 95298 Segmentation fault timeout 10s main
Andere typen aanwijzers in “c” zijn als volgt:
- Hangende aanwijzer
- Complexe aanwijzer
- Dichtbij wijzer
- Verre pointer
- Enorme pointer
Directe en indirecte toegangspunten
In C zijn er twee gelijkwaardige manieren om toegang te krijgen tot een variabele inhoud en deze te manipuleren
- Directe toegang: we gebruiken direct de variabelenaam
- Indirecte toegang: we gebruiken een pointer naar de variabele
Laten we dit begrijpen met behulp van het onderstaande programma
Nadat het programma zonder fouten is gecompileerd, is het resultaat:
Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48
Aanwijzerberekeningen in C
De aanwijzerbewerkingen worden samengevat in de volgende afbeelding
Prioritaire bewerking (prioriteit)
Wanneer we met C-pointers werken, moeten we in acht nemen de volgende prioriteitsregels:
Als een P-pointer naar een X-variabele verwijst, dan kan * P overal gebruikt worden waar X geschreven kan worden.
De volgende uitdrukkingen zijn equivalent:
In het laatste geval zijn haakjes nodig: aangezien de unaire operatoren * en ++ worden geëvalueerd van rechts naar links, zonder de haakjes, is de aanwijzer P zou worden verhoogd, niet het object waarop P wijst.
Onderstaande tabel toont de rekenkundige en basisbewerking die kan worden gebruikt bij het omgaan met C-aanwijzers
Operatie | Toelichting |
Toewijzing | int * P1, * P2 P1 = P2; P1 en P2 wijzen naar dezelfde integervariabele |
Verhogen en verlagen | Int * P1; P1 ++; P1–; |
Een offset toevoegen (constante) | Hiermee kan de pointer N elementen in een tabel verplaatsen. De pointer wordt verhoogd of verlaagd met N keer het aantal byte (n) van het type variabele. P1 + 5; |
C Pointers & Arrays met voorbeelden
Traditioneel toegang tot de array-elementen met behulp van de bijbehorende index, maar deze methode kan worden geëlimineerd door pointers te gebruiken. Aanwijzers maken het gemakkelijk om toegang te krijgen tot elk array-element.
Uitvoer
12345
Door een bepaald nummer aan een pointer toe te voegen, wordt de pointerlocatie verplaatst naar de waarde die is verkregen door een opteloperatie. Stel dat p een pointer is die momenteel naar de geheugenlocatie 0 verwijst als we de volgende optelbewerking uitvoeren, p + 1, dan wordt deze op deze manier uitgevoerd:
Aangezien p momenteel naar locatie 0 wijst na het toevoegen van 1, wordt de waarde 1, en daarom zal de aanwijzer naar de geheugenlocatie 1 wijzen.
C Pointers en Strings met voorbeelden
Een string is een array van char-objecten, eindigend met een nul-teken “\ 0”. We kunnen strings manipuleren met behulp van pointers. Deze aanwijzer in C-voorbeeld legt deze sectie uit.
Uitvoer
First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!
Een andere manier om strings te behandelen is met een reeks aanwijzers zoals in de volgende programma:
Uitvoer:
Please remember these materials:ironcoppergold
Voordelen van aanwijzers in C
- Aanwijzers zijn handig voor toegang tot geheugenlocaties.
- Pointers bieden een efficiënte manier om toegang te krijgen tot de elementen van een array-structuur.
- Pointers worden gebruikt voor dynamische geheugentoewijzing en ongedaan maken van de toewijzing.
- Pointers worden gebruikt om complexe datastructuren te vormen, zoals een gekoppelde lijst, grafiek, boom, etc.
Nadelen van Pointers in C
- Pointers zijn een beetje ingewikkeld te begrijpen.
- Pointers kunnen leiden tot verschillende fouten, zoals segmentatiefouten of kunnen toegang krijgen tot een geheugenlocatie die helemaal niet nodig is.
- Als een onjuiste waarde aan een pointer wordt verstrekt, het kan geheugenbeschadiging veroorzaken.
- Pointers zijn ook verantwoordelijk voor geheugenlekkage.
- Pointers zijn relatief langzamer dan die van de variabelen.
- Programmeurs vinden het erg moeilijk om met de pointers te werken; daarom is het de verantwoordelijkheid van de programmeur om een pointer zorgvuldig te manipuleren.
Samenvatting
- Een pointer is niets anders dan een geheugenlocatie waar gegevens worden opgeslagen.
- Een aanwijzer wordt gebruikt om toegang te krijgen tot de geheugenlocatie.
- Er zijn verschillende soorten aanwijzers, zoals een nulaanwijzer, een wilde aanwijzer, een lege aanwijzer en andere soorten aanwijzers.
- Pointers kunnen worden gebruikt met array en string om efficiënter toegang te krijgen tot elementen.
- We kunnen functie-pointers maken om een functie dynamisch aan te roepen.
- Rekenkundige bewerkingen kunnen worden uitgevoerd op een aanwijzer die bekend staat als aanwijzer rekenkunde.
- Pointers kunnen ook verwijzen naar functies, waardoor het gemakkelijk is om verschillende functies aan te roepen in het geval van het definiëren van een array van pointers.
- Als u verschillende variabele datatypes wilt behandelen, kunt u gebruik een typecast void pointer.