logo

Nuorodos žymeklis C

Žinome, kad žymeklio kintamasis gali išsaugoti atminties adresą C kalba, ir šiame straipsnyje sužinosime, kaip naudoti žymeklį norint pasiekti duomenis, saugomus žymeklio nurodytoje atminties vietoje.

greitas rūšiavimas java

Kas yra rodyklė?

Visų pirma, mes peržiūrime, kas yra rodyklė. Rodyklė yra kintamasis, kuriame saugomas kito kintamojo atminties adresas. Žymeklis padeda mums manipuliuoti duomenimis, esančiais atminties adresu, kurį rodo žymeklis. Be to, kelios rodyklės gali nukreipti į tą pačią atmintį.



Apsvarstykite šį pavyzdį,

int num = 10; int *ptr; ptr = #>

Mes išsaugojome adresą ant vieno kintamasis ptr žymeklį, bet dabar, kaip pasiekti atmintyje saugomą reikšmę nurodytu adresu ptr ? Čia atsiranda nuorodų panaikinimas.

Nuorodos žymeklis C

Prieiga arba manipuliavimas turiniu, saugomu žymeklio nurodytame atminties adresu, naudojant nuorodos panaikinimo arba netiesioginės krypties operatorių (*), vadinamas žymeklio nuorodos panaikinimu.



Nuorodos panaikinimo žymeklis C

Žymeklio nuorodos panaikinimo sintaksė

Mes naudojame netiesioginės krypties operatorių (*) kaip priešdėlį, kad nukreiptume žymeklį:

 * ( pointer_name )>

Atmintyje saugomiems duomenims keisti naudojame



 * ( pointer_name ) = new_value;>

Reikia pažymėti, kad new_value turi būti tokio paties tipo kaip ir ankstesnė.

Apsvarstykite aukščiau pateiktus pavyzdžius, kur ptr Taškai ar, t Atminties adreso turinį gali pasiekti nuorodos panaikinimo operatorius *. Dabar *ptr gaus turinį, saugomą adresu, kuris yra 10.

konvertuoti char į eilutę

Num ir ptr atminties adresas ir reikšmės atrodys taip.

Kintamasis Atminties adresas Vertė
skaičius = 10 202020 m 10
202021 m
202022 m
202023 m
ptr = &num 202024 – 202032 202020 m

Pastaba: Darėme prielaidą, kad anksčiau pateiktame pavyzdyje architektūra yra adresuojama baitais, t. y. minimalus vienetas, turintis atskirą adresą, yra baitas.

Rodyklės atšaukimo pavyzdžiai

1 pavyzdys:

Žymeklio naudojimas norint pasiekti ir keisti sveikojo skaičiaus kintamojo reikšmę.

C




// C Program to illustrate the dereferencing of pointer> #include> int> main()> {> >// Declare integer variable number> >int> num = 10;> >// Declare pointer to store address of number> >int>* ptr = #> >// Print the value of number> >printf>(>'Value of num = %d '>, num);> >// Print Address of the number using & operator> >printf>(>'Address of num = %d '>, &num);> >// Print Address stored in the pointer> >printf>(>'Address stored in the ptr = %p '>, ptr);> >printf>(>'Dereference content in ptr using *ptr '>);> >// Access the content using * operator> >printf>(>'Value of *ptr = %d '>, *ptr);> >printf>(>'Now, *ptr is same as number '>);> >printf>(>'Modify the value using pointer to 6 '>);> >// Modify the content in the address to 6 using pointer> >*ptr = 6;> >// Print the modified value using pointer> >printf>(>'Value of *ptr = %d '>, *ptr);> >// Print the modified value using variable> >printf>(>'Value of number = %d '>, num);> >return> 0;> }>

niūri kalba
>

>

c programavimo pavyzdines programas

Išvestis

Value of num = 10 Address of num = 0x7ffe47d51b4c Address stored in the ptr = 0x7ffe47d51b4c Dereference content in ptr using *ptr Value of *ptr = 10 Now, *ptr is same as number Modify the value using pointer to 6 Value of *ptr = 6 Value of number = 6>

2 pavyzdys: Dvigubo rodyklės nuorodos panaikinimas

Dvigubas žymeklis taip pat gali būti panaikintas naudojant tą pačią logiką, bet jūs turėsite naudoti netiesioginės krypties operatorių du kartus: vieną, kad pereitumėte prie žymeklio, į kurį nukreipia dvigubas žymeklis, o kitą - norint pasiekti tikrąją reikšmę.

C




ekspertų sistemos
// C program to dereference double pointer> #include> int> main()> {> >int> var = 10;> >int>* ptr = &var;> >// double pointer> >int>** dptr = &ptr;> >// dereferencing the double pointer> >printf>(>'Accesing value from double pointer using '> >'**dptr: %d'>,> >**dptr);> >return> 0;> }>

>

>

Išvestis

Accesing value from double pointer using **dptr: 10>

Taip pat galime atmesti bet kokio lygio nuorodas.

Kaip veikia nuorodų panaikinimas?

Kai mes paprašome kompiliatoriaus panaikinti žymeklio nuorodą, jis atlieka tris dalykus:

  • Pirmiausia jis ieško žymeklyje saugomo adreso.
  • Tada jis ieško žymeklio tipo, kad galėtų nustatyti, kiek atminties reikia skaityti. Pavyzdžiui, 4 byes int, 1 baitas char ir tt Tai taip pat yra pagrindinė priežastis, kodėl mums reikia nurodyti žymeklio tipą deklaracijoje, nors kiekvienos žymeklio dydis sistemoje yra toks pat.
  • Galiausiai jis nuskaito atmintį ir grąžina saugomus duomenis.

Pastaba: Iš pirmiau pateiktų samprotavimų taip pat galime daryti išvadą, kad negalime nurodyti tuščiosios rodyklės, nes duomenų, į kuriuos jis nurodo, dydis nežinomas. Taigi, norėdami panaikinti nuorodą, turime įvesti tuščiąją rodyklę.