C žymekliai (su pavyzdžiais)

Šioje pamokoje sužinosite apie rodykles; kokie yra patarimai, kaip juos naudojate ir dažniausiai pasitaikančios klaidos, su kuriomis galite susidurti dirbdami su jais naudodamiesi pavyzdžiais.

Rodyklės yra galingos C ir C ++ programavimo savybės. Prieš išmokdami rodyklių, sužinokime apie adresus programuojant C.

Adresas C

Jei jūsų programoje yra kintamasis kintamasis, &varatmintyje nurodysite jo adresą.

Naudodamiesi scanf()funkcija, mes daug kartų naudojome adresą .

 scanf("%d", &var);

Čia vartotojo įvesta vertė saugoma kintamojo kintamajame. Paimkime darbinį pavyzdį.

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

Rezultatas

 var: 5 adresas: 2686778

Pastaba: greičiausiai gausite kitą adresą, kai paleisite aukščiau nurodytą kodą.

C Rodyklės

Rodyklės (rodyklės kintamieji) yra specialūs kintamieji, naudojami adresams, o ne reikšmėms saugoti.

Rodyklės sintaksė

Štai kaip mes galime paskelbti rodykles.

 int* p;

Čia mes paskelbėme rodyklę p inttipo.

Taip pat galite deklaruoti rodykles.

 int *p1; int * p2; 

Paimkime kitą pavyzdžių deklaravimo pavyzdį.

 int* p1, p2;

Čia mes paskelbėme rodyklę p1 ir įprastą kintamąjį p2.

Adresų priskyrimas rodyklėms

Paimkime pavyzdį.

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

Čia 5 yra priskirtas kintamajam c. C adresas priskiriamas kompiuterio rodyklei.

Gaukite dalyko vertę, kurią nurodo rodyklės

Norėdami gauti žymeklio nurodytą daikto vertę, mes naudojame *operatorių. Pavyzdžiui:

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

Čia adresas cpriskiriamas kompiuterio rodyklei. Norėdami gauti tuo adresu išsaugotą vertę, naudojome * pc.

Pastaba: Pirmiau pateiktame pavyzdyje pc yra rodyklė, o ne *pc. Jūs negalite ir neturėtumėte daryti kažko panašaus *pc = &c;

Beje, *vadinamas išimties operatoriumi (dirbant su rodyklėmis). Jis valdo žymeklį ir pateikia jame rodomą vertę.

Rodyklių rodoma kintanti vertė

Paimkime pavyzdį.

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

Kompiuterio rodyklei priskyrėme c adresą.

Tada pakeitėme c reikšmę į 1. Kadangi pc ir c adresas yra vienodi, *pcgauname 1.

Paimkime kitą pavyzdį.

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

Kompiuterio rodyklei priskyrėme c adresą.

Tada mes pakeitėme *pcį 1 naudodami *pc = 1;. Kadangi kompiuteris ir c adresas yra vienodi, c bus lygus 1.

Paimkime dar vieną pavyzdį.

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

Iš pradžių c adresas priskiriamas kompiuterio rodyklei naudojant pc = &c;. Kadangi c yra 5, *pcgauname 5.

Tada d adresas priskiriamas kompiuterio rodyklei naudojant pc = &d;. Kadangi d yra -15, *pcsuteikia mums -15.

Pavyzdys: Rodyklių darbas

Paimkime darbinį pavyzdį.

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

Rezultatas

 C adresas: 2686784 c reikšmė: 22 žymeklio adresas: 2686784 rodyklės pc turinys: 22 rodyklės adresas: 2686784 rodyklės pc turinys: 11 c adresas: 2686784 c reikšmė: 2 

Programos paaiškinimas

  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;

Abiem atvejais mes kuriame žymeklį p(ne *p) ir priskiriame &cjį.

Kad išvengtume painiavos, galime naudoti tokį teiginį:

 int* p = &c;

Dabar jūs žinote, kas yra žymekliai, ir kitoje instrukcijoje sužinosite, kaip rodyklės yra susijusios su masyvais.

Įdomios straipsniai...