Pekeren i C-språket er en variabel som lagrer adressen til en annen variabel. Denne variabelen kan være av typen int, char, array, function eller en hvilken som helst annen peker. Størrelsen på pekeren avhenger av arkitekturen. Men i 32-bits arkitektur er størrelsen på en peker 2 byte.
Tenk på følgende eksempel for å definere en peker som lagrer adressen til et heltall.
int n = 10; int* p = &n; // Variable p of type pointer is pointing to the address of the variable n of type integer.
Erklærer en peker
Pekeren på c-språk kan deklareres ved hjelp av * (stjernesymbol). Det er også kjent som indirektionspeker som brukes til å avreferere en peker.
int *a;//pointer to int char *c;//pointer to char
Peker eksempel
Et eksempel på bruk av pekere for å skrive ut adressen og verdien er gitt nedenfor.
Som du kan se i figuren ovenfor, lagrer pekervariabel adressen til tallvariabelen, det vil si fff4. Verdien av tallvariabelen er 50. Men adressen til pekervariabelen p er aaa3.
Ved hjelp av * ( indirektionsoperatør ), kan vi skrive ut verdien av pekervariabel p.
arrayliste metoder
La oss se pekereksemplet som forklart for figuren ovenfor.
#include int main(){ int number=50; int *p; p=&number;//stores the address of number variable printf('Address of p variable is %x ',p); // p contains the address of the number therefore printing p gives the address of number. printf('Value of p variable is %d ',*p); // As we know that * is used to dereference a pointer therefore if we print *p, we will get the value stored at the address contained by p. return 0; }
Produksjon
Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50
Peker til array
int arr[10]; int *p[10]=&arr; // Variable p of type pointer is pointing to the address of an integer array arr.
Peker til en funksjon
void show (int); void(*p)(int) = &display; // Pointer p is pointing to the address of a function
Peker til struktur
struct st { int i; float f; }ref; struct st *p = &ref;
Fordel med peker
1) Peker reduserer koden og forbedrer ytelsen , den brukes til å hente strenger, trær osv. og brukes sammen med matriser, strukturer og funksjoner.
2) Vi kan returnere flere verdier fra en funksjon ved å bruke pekeren.
3) Det gjør at du kan få tilgang til et hvilket som helst minnested i datamaskinens minne.
Bruk av peker
Det er mange bruksområder for pekere i c-språk.
css midtknapp
1) Dynamisk minnetildeling
I c-språket kan vi dynamisk allokere minne ved å bruke malloc()- og calloc()-funksjoner der pekeren brukes.
2) Matriser, funksjoner og strukturer
rihanna alder
Pekere i c-språk er mye brukt i matriser, funksjoner og strukturer. Det reduserer koden og forbedrer ytelsen.
Adresse til (&) operatør
Adressen til operatoren '&' returnerer adressen til en variabel. Men vi må bruke %u for å vise adressen til en variabel.
#include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; }
Produksjon
value of number is 50, address of number is fff4
NULL-peker
En peker som ikke er tildelt noen verdi, men NULL, er kjent som NULL-pekeren. Hvis du ikke har noen adresse som skal spesifiseres i pekeren på tidspunktet for deklarasjonen, kan du tilordne NULL-verdien. Det vil gi en bedre tilnærming.
int *p=NULL;
I de fleste biblioteker er verdien på pekeren 0 (null).
Peker Program for å bytte to tall uten å bruke den tredje variabelen.
#include int main(){ int a=10,b=20,*p1=&a,*p2=&b; printf('Before swap: *p1=%d *p2=%d',*p1,*p2); *p1=*p1+*p2; *p2=*p1-*p2; *p1=*p1-*p2; printf(' After swap: *p1=%d *p2=%d',*p1,*p2); return 0; }
Produksjon
Before swap: *p1=10 *p2=20 After swap: *p1=20 *p2=10
Lese komplekse tips
Det er flere ting som må tas i betraktning når du leser de komplekse pekerne i C. La oss se forrangen og assosiativiteten til operatorene som brukes angående pekere.
Operatør | Presedens | Assosiativitet |
---|---|---|
(), [] | 1 | Venstre til høyre |
*, identifikator | 2 | Høyre til venstre |
Data-type | 3 | - |
Her må vi legge merke til at
- (): Denne operatoren er en parentes-operator som brukes til å deklarere og definere funksjonen.
- []: Denne operatoren er en array subscript operator
- * : Denne operatoren er en pekeroperator.
- Identifikator: Det er navnet på pekeren. Dette vil alltid prioriteres.
- Datatype: Datatype er typen variabel som pekeren er ment å peke til. Det inkluderer også modifikatoren som signed int, long, etc).
Slik leser du pekeren: int (*p)[10].
For å lese pekeren må vi se at () og [] har lik prioritet. Derfor må deres assosiativitet vurderes her. Assosiativiteten er venstre til høyre, så prioritet går til ().
programmering i c-matriser
Innenfor parentesen (), har pekeroperatør * og pekernavn (identifikator) p samme prioritet. Derfor må assosiativiteten deres vurderes her som er høyre til venstre, så prioritet går til p, og andre prioritet går til *.
Tilordne 3. prioritet til [] siden datatypen har siste prioritet. Derfor vil pekeren se slik ut.
- røye -> 4
- * -> 2
- p -> 1
- [10] -> 3
Pekeren vil bli lest som p er en peker til en rekke heltall av størrelse 10.
Eksempel
Hvordan lese følgende peker?
int (*p)(int (*)[2], int (*)void))
Forklaring
Denne pekeren vil bli lest som p er en peker til en funksjon som aksepterer den første parameteren som pekeren til en endimensjonal rekke av heltall av størrelse to og den andre parameteren som pekeren til en funksjon som parameteren er ugyldig og returtypen er heltallet.