Kuidas C-s viiteid luua

Osutajad on iga uue C-programmeerija õudusunenägu. Kuid need on ka funktsioon, mis tegi C-st laialt levinud võimsa programmeerimiskeele, mis on tänapäevani. Nagu paljud teised programmeerimisfunktsioonid ja -konstruktsioonid, on ka C-osutajate loomisel ja kasutamisel süstemaatiline lähenemine. See artikkel on samm-sammuline juhend viidate selgeks ja lihtsaks loomiseks ja kasutamiseks.

1
Otsustage kursori tüüp (st andmete tüüp, millele kursor osutab). Abiks võivad olla järgmised näpunäited: kui deklareerite dünaamilist massiivi, kasutage massiivi üksuste andmetüüpi.Kui deklareerite kursori, et pääseda juurde muutuja andmetele, kasutage muutujaga sama andmetüüpi.Kui deklareerite kursorit loendistruktuuri läbimiseks, kasutage loendisõlme andmetüüpi (tavaliselt kasutaja loodud struktuur). Kui deklareerite kursorit puu läbimiseks, kasutage puusõlme andmetüüpi või puusõlme tüübi kursorit kui tüüp (osuti puusõlme tüübi osutile!).

2
Deklareerige kursor sellise süntaksi abil: data-type * pointer-identifier; kus andmetüüp on tüüp, mille otsustasite sammus 1 pointer-identifier on osuti muutuja identifikaator või nimi

3
Määrake kursor esialgsesse mälukohta. Seda saab teha kasutades ühte järgmistest meetoditest: Mälu eraldamine ja sellele kursori abil osutamine: int * i = malloc(sizeof(int)*n); kus n on omistatavate mäluplokkide arv.Muutuja aadressi määramine osutile: int * i = & x; kus “x” on täisarv ja (&) tähendab aadressi. Massiivi identifikaatori määramine osutile: int * i = massiiv1; kus massiiv1 on täisarv massiiv(int[] massiiv1;).Viite määramine osutile: int * i = a; kus “a” on täisarvuviide (int & a;). Teise osuti määramine osutile: int * i = z; kus “z” on teine ​​täisarvu osuti (int * z;)

4
Kui teil on vaja eraldada andmeüksus, millele kursor praegu osutab, kasutage väärtus-aadressi operaatorit (*): int x = *i; kus i on täisarvu osuti.

5
Kasutage kursori indekseerimisoperaatorit nii, nagu oleks tegemist massiiviga, kui soovite saada kursori kõrval mäluasukohta ilma kursorit tegelikult edasi viimata. Näiteks kui teil on täisarvu osuti i, saate kasutada i[2], mis toob välja täisarvu, mis on pärast täisarvu kohe pärast viitega näidatud täisarvu (täisarv, mis on 2 täisarvu pärast praegust asukohta). Kursor i osutab endiselt samale mälukohale. Teine alternatiiv sellele on väärtuse hankimine kursorilt 2 sammu pärast seda kursorit: *(i + 2)

6
Kasutage tehteid inkrement (++), decrement (–), += ja -= alati, kui peate praegust asukohta muutma. i += 5; viib täisarvu osuti i 5 täisarvu edasi.

7
Pärast kursori kasutamise lõpetamist, kui eraldasite sellele kursorile mälu, vabastage eraldatud mälu kindlasti funktsiooni free() abil. (vaba(i); kus i on kursor)