logo

C pekare

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.

pekare exempel

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

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örFöreträdeAssociativitet
(), []1Vänster till höger
*, identifierare2Höger till vänster
Data typ3-

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.