C-pekere (med eksempler)

I denne opplæringen lærer du om pekere; hva tips er, hvordan bruker du dem og de vanlige feilene du kan møte når du arbeider med dem ved hjelp av eksempler.

Pekere er kraftige funksjoner i C og C ++ programmering. Før vi lærer tips, la oss lære om adresser i C-programmering.

Adresse i C

Hvis du har en variabel var i programmet, &varvil den gi deg adressen i minnet.

Vi har brukt adresse flere ganger mens vi bruker scanf()funksjonen.

 scanf("%d", &var);

Her lagres verdien som er angitt av brukeren i adressen til variabel. La oss ta et arbeidseksempel.

 #include int main() ( int var = 5; printf("var: %d", var); // Notice the use of & before var printf("address of var: %p", &var); return 0; ) 

Produksjon

 var: 5 adresse til var: 2686778

Merk: Du vil sannsynligvis få en annen adresse når du kjører ovennevnte kode.

C Pekere

Pekere (pekervariabler) er spesielle variabler som brukes til å lagre adresser i stedet for verdier.

Pekersyntaks

Slik kan vi erklære pekere.

 int* p;

Her har vi erklært en peker p av inttypen.

Du kan også erklære pekere på disse måtene.

 int *p1; int * p2; 

La oss ta et annet eksempel på å erklære pekere.

 int* p1, p2;

Her har vi deklarert en peker p1 og en normal variabel p2.

Tilordne adresser til pekere

La oss ta et eksempel.

 int* pc, c; c = 5; pc = &c; 

Her tildeles 5 variabelen c. Og adressen til c er tilordnet pc-pekeren.

Få verdi av ting peket av pekere

For å få verdien av tingen påpekt av pekerne, bruker vi *operatøren. For eksempel:

 int* pc, c; c = 5; pc = &c; printf("%d", *pc); // Output: 5

Her ctildeles adressen til pc-pekeren. For å få verdien lagret i den adressen, brukte vi * pc.

Merk: I eksemplet ovenfor er pc en peker, ikke *pc. Du kan ikke og bør ikke gjøre noe sånt som *pc = &c;

Forresten, *kalles dereference-operatøren (når man arbeider med pekere). Den fungerer på en peker og gir verdien som er lagret i pekeren.

Endring av verdi pekt av pekere

La oss ta et eksempel.

 int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // Output: 1 printf("%d", *pc); // Ouptut: 1

Vi har tilordnet adressen til c til pc-pekeren.

Deretter endret vi verdien på c til 1. Siden pc og adressen til c er den samme, *pcgir oss 1.

La oss ta et annet eksempel.

 int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // Ouptut: 1 printf("%d", c); // Output: 1 

Vi har tilordnet adressen til c til pc-pekeren.

Deretter endret vi *pctil 1 ved hjelp av *pc = 1;. Siden pc og adressen til c er den samme, vil c være lik 1.

La oss ta et eksempel til.

 int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // Output: 5 pc = &d; printf("%d", *pc); // Ouptut: -15

I utgangspunktet tildeles adressen til c pc-pekeren ved hjelp av pc = &c;. Siden c er 5, *pcgir oss 5.

Deretter tildeles adressen til d pc-pekeren ved hjelp av pc = &d;. Siden d er -15, *pcgir oss -15.

Eksempel: Working of Pointers

La oss ta et arbeidseksempel.

 #include int main() ( int* pc, c; c = 22; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 22 pc = &c; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 22 c = 11; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 11 *pc = 2; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 2 return 0; ) 

Produksjon

 Adresse til c: 2686784 Verdi på c: 22 Adresse på peker pc: 2686784 Innhold på peker pc: 22 Adresse på peker pc: 2686784 Innhold på peker pc: 11 Adresse på c: 2686784 Verdi på c: 2 

Forklaring av programmet

  1. int* pc, c;

    Here, a pointer pc and a normal variable c, both of type int, is created.
    Since pc and c are not initialized at initially, pointer pc points to either no address or a random address. And, variable c has an address but contains random garbage value.
  2. c = 22;

    This assigns 22 to the variable c. That is, 22 is stored in the memory location of variable c.
  3. pc = &c;

    This assigns the address of variable c to the pointer pc.
  4. c = 11;

    This assigns 11 to variable c.
  5. *pc = 2;

    This change the value at the memory location pointed by the pointer pc to 2.

Common mistakes when working with pointers

Suppose, you want pointer pc to point to the address of c. Then,

 int c, *pc; // pc is address but c is not pc = c; // Error // &c is address but *pc is not *pc = &c; // Error // both &c and pc are addresses pc = &c; // both c and *pc values *pc = c;

Here's an example of pointer syntax beginners often find confusing.

 #include int main() ( int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; )

Why didn't we get an error when using int *p = &c;?

It's because

 int *p = &c;

is equivalent to

 int *p: p = &c;

I begge tilfeller lager vi en peker p(ikke *p) og tilordner &cden.

For å unngå denne forvirringen kan vi bruke uttalelsen slik:

 int* p = &c;

Nå du vet hva pekere er, vil du lære hvordan pekere er relatert til matriser i neste opplæring.

Interessante artikler...