logo

C pointere

Pointeren i C-sprog er en variabel, som gemmer adressen på en anden variabel. Denne variabel kan være af typen int, char, array, funktion eller enhver anden pointer. Størrelsen på markøren afhænger af arkitekturen. Men i 32-bit arkitektur er størrelsen af ​​en pointer 2 byte.

Overvej følgende eksempel for at definere en pointer, som gemmer adressen på et heltal.

 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 pointer

Markøren i c-sprog kan erklæres ved hjælp af * (stjernesymbol). Det er også kendt som indirekte pointer, der bruges til at dereferere en pointer.

 int *a;//pointer to int char *c;//pointer to char 

Pointer eksempel

Et eksempel på brug af pointere til at udskrive adressen og værdien er givet nedenfor.

pointer eksempel

Som du kan se i ovenstående figur, gemmer pointervariabel adressen på talvariabelen, dvs. fff4. Værdien af ​​talvariablen er 50. Men adressen på pointervariablen p er aaa3.

Ved hjælp af * ( indirekte operatør ), kan vi udskrive værdien af ​​pointer variabel p.

1 million i cifre

Lad os se pointer-eksemplet som forklaret for ovenstående figur.

 #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; } 

Produktion

 Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50 

Pointer til array

 int arr[10]; int *p[10]=&arr; // Variable p of type pointer is pointing to the address of an integer array arr. 

Marker til en funktion

 void show (int); void(*p)(int) = &display; // Pointer p is pointing to the address of a function 

Pointer til struktur

 struct st { int i; float f; }ref; struct st *p = &ref; 
c pointer

Fordel ved pointer

1) Pointer reducerer koden og forbedrer ydeevnen , den bruges til at hente strenge, træer osv. og bruges sammen med arrays, strukturer og funktioner.

2) Vi kan returnere flere værdier fra en funktion ved hjælp af markøren.

3) Det gør dig i stand til få adgang til enhver hukommelsesplacering i computerens hukommelse.

Brug af pointer

Der er mange anvendelser af pointere i c-sprog.

string.format i java

1) Dynamisk hukommelsestildeling

I c-sprog kan vi dynamisk allokere hukommelse ved hjælp af malloc()- og calloc()-funktioner, hvor markøren bruges.

2) Arrays, funktioner og strukturer

indstillingsmenu for Android

Pointere i c-sprog er meget brugt i arrays, funktioner og strukturer. Det reducerer koden og forbedrer ydeevnen.

Adresse på (&) operatør

Adressen på operatoren '&' returnerer adressen på en variabel. Men vi skal bruge %u til at vise adressen på en variabel.

 #include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; } 

Produktion

 value of number is 50, address of number is fff4 

NULL Pointer

En pointer, der ikke er tildelt nogen værdi, men NULL, er kendt som NULL-markøren. Hvis du ikke har nogen adresse, der skal angives i markøren på tidspunktet for deklarationen, kan du tildele NULL-værdien. Det vil give en bedre tilgang.

 int *p=NULL; 

I de fleste biblioteker er værdien af ​​markøren 0 (nul).

Pointer Program til at bytte to tal uden at bruge den 3. variabel.

 #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; } 

Produktion

 Before swap: *p1=10 *p2=20 After swap: *p1=20 *p2=10 

Læse komplekse pointer

Der er flere ting, som skal tages i betragtning, mens du læser de komplekse pointere i C. Lad os se forrangen og associativiteten af ​​de operatorer, der bruges til pointere.

OperatørForrangAssociativitet
(), []1Venstre til højre
*, identifikator2Højre til venstre
Datatype3-

Her må vi bemærke, at

  • (): Denne operator er en parentes operator, der bruges til at erklære og definere funktionen.
  • []: Denne operator er en array subscript operator
  • * : Denne operator er en markøroperator.
  • Identifikator: Det er navnet på markøren. Dette vil altid blive prioriteret.
  • Datatype: Datatype er typen af ​​den variabel, som markøren er beregnet til at pege på. Det inkluderer også modifikatoren som signed int, long, etc).

Sådan læser du markøren: int (*p)[10].

For at læse markøren skal vi se, at () og [] har samme forrang. Derfor skal deres associativitet overvejes her. Associativiteten er venstre mod højre, så prioriteringen går til ().

spærrede numre

Inden for parentesen (), har pointeroperator * og pointernavn (identifikator) p samme forrang. Derfor skal deres associativitet overvejes her, som er højre mod venstre, så prioritet går til p, og anden prioritet går til *.

Tildel 3. prioritet til [], da datatypen har den sidste prioritet. Derfor vil markøren se ud som følger.

  • char -> 4
  • * -> 2
  • p -> 1
  • [10] -> 3

Markøren vil blive læst som p er en pointer til en matrix af heltal på størrelse 10.

Eksempel

Hvordan læser man følgende pointer?

 int (*p)(int (*)[2], int (*)void)) 

Forklaring

Denne pointer vil blive læst som p er en pointer til en funktion, der accepterer den første parameter som markøren til en endimensional matrix af heltal af størrelse to, og den anden parameter som pointeren til en funktion, hvilken parameter er ugyldig og returtypen er hele tallet.