Pekaren i C-språket är en variabel som lagrar adressen till en annan variabel. Denna variabel kan vara av typen int, char, array, function eller någon annan pekare. Storleken på pekaren beror på arkitekturen. Men i 32-bitars arkitektur är storleken på en pekare 2 byte.
Betrakta följande exempel för att definiera en pekare som lagrar adressen till ett heltal.
int n = 10; int* p = &n; // Variable p of type pointer is pointing to the address of the variable n of type integer.
Deklarerar en pekare
Pekaren i c-språket kan deklareras med * (asterisksymbol). Den är också känd som inriktningspekare som används för att avreferera en pekare.
int *a;//pointer to int char *c;//pointer to char
Pekarexempel
Ett exempel på hur man använder pekare för att skriva ut adressen och värdet ges nedan.
Som du kan se i figuren ovan lagrar pekarvariabel adressen till nummervariabeln, dvs fff4. Värdet på talvariabeln är 50. Men adressen för pekvariabeln p är aaa3.
Med hjälp av * ( indirekt operatör ), kan vi skriva ut värdet på pekarvariabeln p.
js settimeout
Låt oss se pekarexemplet som förklarats för ovanstå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
Pekare till array
int arr[10]; int *p[10]=&arr; // Variable p of type pointer is pointing to the address of an integer array arr.
Pekare till en funktion
void show (int); void(*p)(int) = &display; // Pointer p is pointing to the address of a function
Pekare till struktur
struct st { int i; float f; }ref; struct st *p = &ref;
Fördel med pekare
1) Pekare minskar koden och förbättrar prestandan , den används för att hämta strängar, träd, etc. och används med arrayer, strukturer och funktioner.
2) Vi kan returnera flera värden från en funktion med hjälp av pekaren.
3) Det gör att du kan komma åt valfri minnesplats i datorns minne.
Användning av pekare
Det finns många tillämpningar av pekare i c-språk.
1) Dynamisk minnesallokering
importera skanner java
I c-språket kan vi dynamiskt allokera minne med funktionerna malloc() och calloc() där pekaren används.
2) Arrayer, funktioner och strukturer
Pekare i c-språk används ofta i arrayer, funktioner och strukturer. Det minskar koden och förbättrar prestandan.
Adress till (&) operatör
Adressen till operatorn '&' returnerar adressen till en variabel. Men vi måste använda %u för att visa adressen till en variabel.
#include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; }
Produktion
är proteinfett
value of number is 50, address of number is fff4
NULL-pekare
En pekare som inte är tilldelad något värde men NULL kallas NULL-pekaren. Om du inte har någon adress som ska anges i pekaren vid tidpunkten för deklarationen kan du tilldela NULL-värdet. Det kommer att ge ett bättre tillvägagångssätt.
int *p=NULL;
I de flesta bibliotek är värdet på pekaren 0 (noll).
Pointer Program för att byta två tal utan att använda den 3:e variabeln.
#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äser komplexa tips
Det finns flera saker som måste tas i beaktande när man läser de komplexa pekarna i C. Låt oss se företrädet och associativiteten hos de operatorer som används för pekare.
Operatör | Företräde | Associativitet |
---|---|---|
(), [] | 1 | Vänster till höger |
*, identifierare | 2 | Höger till vänster |
Data typ | 3 | - |
Här måste vi lägga märke till att
hur man väljer kolumner från olika tabeller i sql
- (): Denna operator är en parentesoperator som används för att deklarera och definiera funktionen.
- []: Den här operatorn är en array subscript operator
- * : Denna operator är en pekoperator.
- Identifierare: Det är namnet på pekaren. Prioriteten kommer alltid att tilldelas detta.
- Datatyp: Datatyp är typen av variabel som pekaren är avsedd att peka på. Det inkluderar också modifieraren som signed int, long, etc).
Så här läser du pekaren: int (*p)[10].
För att läsa pekaren måste vi se att () och [] har samma företräde. Därför måste deras associativitet beaktas här. Associativiteten är från vänster till höger, så prioritet går till ().
Inom parentesen () har pekoperatorn * och pekarens namn (identifierare) p samma prioritet. Därför måste deras associativitet beaktas här som är höger till vänster, så prioritet går till p och andra prioritet går till *.
Tilldela 3:e prioritet till [] eftersom datatypen har sista företräde. Därför kommer pekaren att se ut som följande.
- röding -> 4
- * -> 2
- p -> 1
- [10] -> 3
Pekaren kommer att läsas som p är en pekare till en matris med heltal av storlek 10.
Exempel
Hur läser man följande pekare?
int (*p)(int (*)[2], int (*)void))
Förklaring
Denna pekare kommer att läsas som p är en pekare till en sådan funktion som accepterar den första parametern som pekaren till en endimensionell matris av heltal av storlek två och den andra parametern som pekaren till en funktion vars parameter är ogiltig och returtypen är heltal.