Ta knyga tikras mėšlas, pradedant mokytis. Vos suprasdamas anglų kalbą iš angliškų šaltinių supratau daugiau, negu iš tos knygos.
Taigi, važiuojam:
Rodyklė - tai toks duomenų tipas, kuriame saugomi atminties adresai.
Sukuriam rodyklę ir du kintamuosius:
Dabar turime 4 baitų dydžio kintamąjį(visos rodyklės x86 sistemoje yra 4 baitu dydzio, kadangi tokie adresai).
Dabar priskiriam kintamiesiems reiksmes, o rodyklei priskiriam kintamojo a adresa.
& - c kalboje yra adreso operatorius. Tai reiskia, kad vietoje pacio kintamojo reiksmės rodomas kintamojo adresas atmintyje.
Dabar kintamojo a reiksme yra 1, kintamojo b reiksme yra 2, o rodykle c rodo į kintamaji a. Tai reiskia, kad kreipdamiesi i rodykle mes pasieksim ta pati adresa, kaip ir kintamasis a. Taigi nuo sio momento kode vietoje kintamojo a galima rasyti *c .
Čia * yra netiesioginio duomenų perdavimo operatorius. Jis reiskia, kad kreipiamės ne į pačią rodyklę, į tą adresą, kuris saugomas rodyklėje.
Taigi dabar kintamojo a reikšmė yra 3, kintamojo b reikšmė yra 2, o rodyklė teberodo į kintamąjį a.
Dabar rodyklė rodo į kintamąjį b, ir vietoje b galime rašyti *c. Trumpiau ir vaizdžiau sakant, rodyklės yra kaip "shortcut'ai" ant windows desktop'o, t.y. daug rodyklių, su skirtingais pavadinimais gali būti nukreiptos į vieną ir tą patį failą.
Kam reikalingos rodyklės?
Programuojant paprastas programas jų nereikia, tačiau kuriant sudėtingas programas rodyklės labai praverčia. Naudojantis jomis, galima greitai perduoti didelius duomenis iš vienos funkcijos į kitą. Yprastai iškviečiant funkciją, jai perduodant argumentus, jai perduodamos tik reikšmės. Funkcija pati susikuria reikiamus kintamuosius ir juose išsaugo tas reikšmes. Vadinasi, naudojama papildoma atmintis, ir duomenys nukopijuojami į ją. Kai duomenų kiekiai maži, neatsitinka nieko baisaus, tačiau kai reikia perduodi didelius duomenis, atmintis pradeda stabdyti. Todėl, užuot perduodami didelius duomenų kiekius, programuotojai naudojasi rodyklėmis. Vietoje tūkstančio sveikųjų skaičių, perduodami viso labo 4 baitai, o funkcija gali naudotis reikiamais duomenimis. Rodyklės ypač svarbios, naudojant masyvus, bet apie tai vėliau. Rodyklės taip pat naudojamos funkcijoms, kurios turi manipuliuoti duomenimis(pvz. rikiavimo funkcijos). Tarkime kuriame duomenų rikiavimo sistemą. Yra funkcijos, kurios pagal kokį nors algoritmą nurodo, kokias reikšmes reikia sukeisti vietomis, o jums reikia parašyti funkciją, kuri tas reikšmes sukeis. Tarkime jūs rašote tokią funkciją:
Kodas: Pasirinkti visus
function keisk(int a, int b)
{
int buf;
buf = b;
b = a;
a = buf;
}
Tokią funkciją iškviesime šitaip:
Tačiau, jinai kintamųjų realiai nesukeis. Ji tiesiog sukeis jų kopijas. Na o dabar parašykime pavyzdį pasinaudodami rodyklėmis:
Kodas: Pasirinkti visus
function keisk(int *a, int *b)
{
int buf;
buf = *b;
*b = *a;
*a = buf;
}
Tokia funkcija sukeis mums reikiamus kintamuosius vietomis, tačiau jai reikės perduoti kintamųjų adresus:
Dabar, perduodant funkcijai adresus, ji gali tiesiogiai prieiti prie jai reikiamų duomenų ir jais manipuliuoti.
Never argue with an idiot. They bring you down to their level and beat you with experience.