logo

C Rodyklės

C kalbos žymeklis yra kintamasis, kuriame saugomas kito kintamojo adresas. Šis kintamasis gali būti int, char, masyvo, funkcijos ar bet kurios kitos rodyklės tipo. Rodyklės dydis priklauso nuo architektūros. Tačiau 32 bitų architektūroje žymeklio dydis yra 2 baitai.

Apsvarstykite šį pavyzdį, norėdami apibrėžti rodyklę, kurioje saugomas sveikojo skaičiaus adresas.

 int n = 10; int* p = &n; // Variable p of type pointer is pointing to the address of the variable n of type integer. 

Rodyklės paskelbimas

Rodyklė c kalba gali būti deklaruojama naudojant * (žvaigždutės simbolis). Jis taip pat žinomas kaip netiesioginis žymeklis, naudojamas žymeklio nuorodai pašalinti.

 int *a;//pointer to int char *c;//pointer to char 

Rodyklės pavyzdys

Toliau pateikiamas rodyklių naudojimo adresui ir vertei spausdinti pavyzdys.

rodyklės pavyzdys

Kaip matote aukščiau esančiame paveikslėlyje, rodyklės kintamasis saugo skaičiaus kintamojo adresą, ty fff4. Skaičių kintamojo reikšmė yra 50. Tačiau rodyklės kintamojo p adresas yra aaa3.

Padedant * ( netiesioginis operatorius ), galime atspausdinti rodyklės kintamojo p reikšmę.

tinklelio išdėstymas

Pažiūrėkime rodyklės pavyzdį, kaip paaiškinta aukščiau esančiame paveikslėlyje.

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

Išvestis

 Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50 

Rodyklė į masyvą

 int arr[10]; int *p[10]=&arr; // Variable p of type pointer is pointing to the address of an integer array arr. 

Rodyklė į funkciją

 void show (int); void(*p)(int) = &display; // Pointer p is pointing to the address of a function 

Rodyklė į struktūrą

 struct st { int i; float f; }ref; struct st *p = &ref; 
c rodyklės

Rodyklės privalumas

1) Rodyklė sumažina kodą ir pagerina našumą , jis naudojamas išgauti eilutes, medžius ir kt., naudojamas su masyvais, struktūromis ir funkcijomis.

2) Mes galime grąžina kelias funkcijos reikšmes naudojant žymeklį.

java konvertuoti char į eilutę

3) Tai leidžia jums tai padaryti pasiekti bet kurią atminties vietą kompiuterio atmintyje.

Rodyklės naudojimas

Yra daug rodyklių programų c kalba.

1) Dinaminis atminties paskirstymas

C kalba galime dinamiškai paskirstyti atmintį naudodami malloc () ir calloc () funkcijas, kur naudojamas žymeklis.

2) Masyvai, funkcijos ir struktūros

C kalbos rodyklės plačiai naudojamos masyvuose, funkcijose ir struktūrose. Tai sumažina kodą ir pagerina našumą.

(&) operatoriaus adresas

Operatoriaus „&“ adresas grąžina kintamojo adresą. Tačiau turime naudoti %u, kad parodytume kintamojo adresą.

 #include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; } 

Išvestis

 value of number is 50, address of number is fff4 

NULL rodyklė

Rodyklė, kuriai nepriskirta jokia reikšmė, bet NULL, yra žinomas kaip NULL rodyklė. Jei deklaracijos metu žymeklyje neturite nurodyti adreso, galite priskirti NULL reikšmę. Tai suteiks geresnį požiūrį.

 int *p=NULL; 

Daugumoje bibliotekų rodyklės reikšmė yra 0 (nulis).

Rodyklės programa, skirta sukeisti du skaičius nenaudojant 3-iojo kintamojo.

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

Išvestis

xd xd prasmė
 Before swap: *p1=10 *p2=20 After swap: *p1=20 *p2=10 

Sudėtingų nuorodų skaitymas

Skaitant sudėtingas C nuorodas reikia atsižvelgti į keletą dalykų. Pažiūrėkime operatorių, naudojamų rodyklėms, pirmenybę ir asociatyvumą.

konvertuoti strin į int
operatoriusPirmenybėAsociatyvumas
(), []1Iš kairės į dešinę
*, identifikatorius2Iš dešinės į kairę
Duomenų tipas3-

Čia turime pastebėti, kad

  • (): Šis operatorius yra skliaustų operatorius, naudojamas funkcijai deklaruoti ir apibrėžti.
  • []: šis operatorius yra masyvo apatinio indekso operatorius
  • * : Šis operatorius yra žymeklio operatorius.
  • Identifikatorius: tai žymeklio pavadinimas. Tam visada bus teikiamas prioritetas.
  • Duomenų tipas: duomenų tipas yra kintamojo, į kurį nukreipiama žymeklis, tipas. Jame taip pat yra modifikatorius, pvz., signed int, long ir tt).

Kaip skaityti žymeklį: int (*p)[10].

Norėdami perskaityti žymeklį, turime pamatyti, kad () ir [] pirmenybė yra lygi. Todėl čia reikia atsižvelgti į jų asociatyvumą. Asociatyvumas yra iš kairės į dešinę, todėl pirmenybė teikiama ().

Skliausteliuose () žymeklio operatorius * ir žymiklio pavadinimas (identifikatorius) p turi tą pačią pirmenybę. Todėl čia reikia atsižvelgti į jų asociatyvumą, kuris yra iš dešinės į kairę, todėl pirmenybė teikiama p, o antrasis prioritetas - *.

Priskirkite 3 prioritetą [], nes duomenų tipas turi paskutinę pirmenybę. Todėl rodyklė atrodys taip.

  • char -> 4
  • * -> 2
  • p -> 1
  • [10] -> 3

Rodyklė bus skaitoma, nes p yra 10 dydžio sveikųjų skaičių masyvas.

Pavyzdys

Kaip perskaityti toliau pateiktą rodyklę?

 int (*p)(int (*)[2], int (*)void)) 

Paaiškinimas

Ši rodyklė bus skaitoma kaip p yra rodyklė į tokią funkciją, kuri priima pirmąjį parametrą kaip rodyklę į vienmatį antrojo dydžio sveikųjų skaičių masyvą, o antrąjį parametrą kaip rodyklę į funkciją, kurios parametras yra negaliojantis ir grąžinimo tipas yra sveikasis skaičius.