Vad är pekare i C?
Pekaren i C är en variabel som lagrar adressen till en annan variabel. En pekare kan också användas för att hänvisa till en annan pekfunktion. En pekare kan ökas / minskas, dvs för att peka på nästa / föregående minnesplats. Syftet med pekaren är att spara minnesutrymme och uppnå snabbare körningstid.
Hur man använder pekare i C
Om vi deklarerar en variabel v av typen int, kommer v faktiskt att lagra ett värde.
v är lika med noll nu.
Men varje variabel, förutom värde, har också sin adress (eller helt enkelt uttryckt där den finns i minnet). Adressen kan hämtas genom att placera ett ampersand (&) före variabelns namn.
Om du skriver ut adressen till en variabel på skärmen ser den ut som ett helt slumpmässigt tal (dessutom kan det skilja sig från kör till kör).
Låt oss prova detta i praktiken med pekaren i C exempel
Utgången för detta program är -480613588.
Vad är en pekare nu? I stället för att lagra ett värde lagrar en pekare en variabeladress.
Pekervariabel
Int * y = & v;
VARIABEL |
PEKARE |
Ett värde som lagras i en namngiven lagrings- / minnesadress |
En variabel som pekar på lagrings- / minnesadressen för en annan variabel |
Förklara en pekare
Liksom variabler, pekare i C progra mming måste deklareras innan de kan användas i ditt program. Pekare kan kallas vad du vill så länge de följer C: s namnregler. En pekardeklaration har följande form.
data_type * pointer_variable_name;
Här,
- data_type är pekarens bastyp av C’s variabeltyper och anger typen av variabel som pekaren pekar på.
- Asterisken (*: samma asterisk som används för multiplikation) som är indirection operator, förklarar en pekare.
Låt oss se några giltiga pekardeklarationer i denna C-pekarehandledning:
Initiera en pekare
Efter att ha förklarat en pekare initialiserar vi den som standardvariabler med en variabeladress. Om pekare i C-programmering inte är oinitialiserade och används i programmet är resultaten oförutsägbara och potentiellt katastrofala.
För att få adressen till en variabel använder vi operatören ampersand (&), placerad framför namnet på en variabel vars adress vi behöver. Pekarinitiering görs med följande syntax.
Pointer Syntax
pointer = &variable;
Ett enkelt program för pekareillustration ges nedan:
Output:
Address stored in a variable p is:60ff08Value stored in a variable p is:10
Operatör | Betydelse |
* | Serverar två ändamål
|
& | Fungerar endast 1 syfte
|
Typer av pekare i C
Följande är de olika typerna av pekare i C:
Nullpekare
Vi kan skapa en nollpekare genom att tilldela nollvärde under pekardeklarationen. Denna metod är användbar när du inte har någon adress tilldelad pekaren. En nollpekare innehåller alltid värdet 0.
Följande program illustrerar användningen av en nollpekare:
#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
Ojämn pekare
I C-programmering kallas också en tom pekare som en generisk pekare. Den har ingen standarddatatyp. En ogiltig pekare skapas med hjälp av nyckelordet tom. Den kan användas för att lagra en adress för vilken variabel som helst.
Följande program illustrerar användningen av en ogiltig pekare:
#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
Vild pekare
En pekare sägs vara en vild pekare om den inte initialiseras till någonting. Dessa typer av C-pekare är inte effektiva eftersom de kan peka på någon okänd minnesplats som kan orsaka problem i vårt program och det kan leda till att programmet kraschar. Man bör alltid vara försiktig när man arbetar med vilda pekare.
Följande program illustrerar användningen av vildpekare:
#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
Andra typer av pekare i ”c” är följande:
- Hängande pekare
- Komplex pekare
- Nära pekare
- Fjärrpekare
- Stor pekare
Pekare för direkt och indirekt åtkomst
I C finns det två likvärdiga sätt för att komma åt och manipulera ett variabelt innehåll
- Direkt åtkomst: vi använder direkt variabelnamnet
- Indirekt åtkomst: vi använder en pekare till variabeln
Låt oss förstå detta med hjälp av programmet nedan
Efter att ha kompilerat programmet utan några fel är resultatet:
Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48
Pekarens aritmetik i C
Pekarens funktioner sammanfattas i följande figur
Prioriterad operation (prioritet)
När vi arbetar med C-pekare måste vi följa följande prioritetsregler:
Om en P-pekare pekar på en X-variabel kan * P användas varhelst X kan skrivas.
Följande uttryck är ekvivalenta:
I det senare fallet behövs parenteser: eftersom de unara operatorerna * och ++ utvärderas från höger till vänster, utan parentes pekaren P skulle ökas, inte objektet på vilket P pekar.
Nedanstående tabell visar den aritmetiska och grundläggande operationen som kan användas vid hantering av C-pekare
Funktion | Förklaring |
Uppdrag | int * P1, * P2 P1 = P2; P1 och P2 pekar på samma heltalsvariabel |
Inkrementering och minskning | Int * P1; P1 ++; P1–; |
Lägga till en förskjutning (konstant) | Detta gör att pekaren kan flytta N-element i en tabell. Pekaren kommer att ökas eller minskas med N gånger antalet byte (er) av typen av variabeln. P1 + 5; |
C-pekare & Arrayer med exempel
Vi har traditionellt få tillgång till arrayelementen med dess index, men den här metoden kan elimineras med hjälp av pekare. Pekare gör det enkelt att komma åt varje arrayelement.
Utdata
12345
Om du lägger till ett visst nummer i en pekare flyttas pekarens plats till det värde som erhålls genom en tilläggsoperation. Antag att p är en pekare som för närvarande pekar på minnesplatsen 0 om vi utför följande tilläggsoperation, p + 1 så kommer den att köras på detta sätt:
Eftersom p för närvarande pekar på platsen 0 efter att ha lagt till 1 blir värdet 1 och därmed pekaren peka på minnesplatsen 1.
C Pekare och strängar med exempel
En sträng är en matris med char-objekt som slutar med ett null tecken ”\ 0”. Vi kan manipulera strängar med hjälp av pekare. Den här pekaren i C-exemplet förklarar det här avsnittet
Utdata
First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!
Ett annat sätt att hantera strängar är med en rad pekare som i följande program:
Output:
Please remember these materials:ironcoppergold
Fördelarna med pekare i C
- Pekare är användbara för åtkomst minnesplatser.
- Pekare ger ett effektivt sätt att få åtkomst till elementen i en matrisstruktur.
- Pekare används för dynamisk minnesallokering såväl som deallocation.
- Pekare används för att bilda komplexa datastrukturer som länkad lista, diagram, träd osv.
Nackdelar med pekare i C
- Pekare är lite komplexa att förstå.
- Pekare kan leda till olika fel såsom segmenteringsfel eller kan komma åt en minnesplats som inte alls behövs.
- Om ett felaktigt värde ges till en pekare, det kan orsaka minneskorruption.
- Pekare är också ansvariga för minnesläckage.
- Pekare är relativt långsammare än variablerna.
- Programmerare tycker att det är mycket svårt att arbeta med pekarna. därför är det programmerarens ansvar att manipulera en pekare noggrant.
Sammanfattning
- En pekare är inget annat än en minnesplats där data lagras.
- En pekare används för att komma åt minnesplatsen.
- Det finns olika typer av pekare, såsom en nollpekare, vildpekare, tomrumspekare och andra typer av pekare.
- Pekare kan användas med array och sträng för att få åtkomst till element mer effektivt.
- Vi kan skapa funktionspekare för att anropa en funktion dynamiskt.
- Aritmetiska operationer kan utföras på en pekare som är känd som pekare-aritmetik.
- Pekare kan också peka på funktion som gör det enkelt att anropa olika funktioner i fallet med att definiera en rad pekare.
- När du vill hantera olika variabla datatyper kan du använd en typecast-tom pekare.