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.
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;
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
operatorius | Pirmenybė | Asociatyvumas |
---|---|---|
(), [] | 1 | Iš kairės į dešinę |
*, identifikatorius | 2 | Iš dešinės į kairę |
Duomenų tipas | 3 | - |
Č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.