logo

C Pekere

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.

peker eksempel

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; 
c pekere

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ørPresedensAssosiativitet
(), []1Venstre til høyre
*, identifikator2Høyre til venstre
Data-type3-

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.