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.
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;
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ør | Forrang | Associativitet |
---|---|---|
(), [] | 1 | Venstre til højre |
*, identifikator | 2 | Højre til venstre |
Datatype | 3 | - |
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.