Programmeerimiskeel C/Viidad
Ilme
Sissejuhatus
[muuda]Viidad on asukoha määrajad mälus, mille abil on võimalik leida antud viidaga seoses olevaid väärtusi. Viida väärtusele pääseb ligi viitamisoperaatoriga [*]. Viidad võivad hoida igasuguseid andmetüüpe, ka funktsioone ja oma deklareeritud tüüpe. Meeldetuletuseks, et mälus hoitavad väärtused jagunevad väärtusteks ja viitadeks.
C omavad viidad kolme praktilist kasutusala:
- Dünaamiliste andmestruktuuride loomeprotsessis
- Väärtuste ülekandmist ühest funktsioonist teise
- Võimaldavad alternatiivse ligipääsu andmetele
Viitade kohta on neli fundamentaalset põhitõde, mida peab teadma:
- Kuidas viitasid deklareerida
- Kuidas viitasid määrata väärtustama, ning kuidas seda vahetada
- Kuidas viitasid panna viitama viidale ja kuidas neid väärtustada
- Kuidas viidad on seoses massiividega
Lisaks:
- Arvuti töötab viitadega kiiremini, seega viitad kasutamine muudab ka programmi effektiivsemaks.
Deklareerimine
[muuda]Viitasid deklareeritakse samamoodi, kui muutujaid, mis hoiavad väärtuseid, vahega et muutuja nimetuse ette käib tärn (tuntud ka kui korrutusmärk '*'). Viit peab omama sama tüüpi, mis väärtusele ta viitama peab.
Näited viitade deklareerimisest
[muuda]//Järgnevalt mõned näited viitade deklareerimise konstruktsioonidest, koos kommentaaridega
int i; // täisarv muutuja 'i'
int *p; // viit 'p' täisarvulisele väärtusele
int a[]; // täisarvu tüüpi massiiv 'a'
int f(); // funktsioon 'f', mis tagastab täisarvu tüüpi muutuja väärtuse
int **pp; // viit 'pp' viidale, mis viitab täisarvule
int (*pa)[]; // viit 'pa' täisarvu tüüpi massiivile
int (*pf)(); // viit 'pf' funktsioonile, mis tagastab täisarvu tüüpi väärtuse
int *ap[]; // massiiv 'ap' viitasid, mis viitavad täisarvu tüüpi väärtusele
int *fp(); // funktsioon 'fp', mis tagastab viida täisarvu tüüpi väärtusele
int ***ppp; // viit 'ppp', mis viitab viidale, mis viitab viidale, mis viitab täisarvu tüüpi väärtusele
int (**ppa)[]; // viit 'ppa', mis viitab viidale, mis viitab täisarvu tüüpi massiivile
int (**ppf)(); // viit 'ppf', mis viitab funktsioonile, mis tagastab täisarvu tüüpi väärtuse
int *(*pap)[]; // viit 'pap', mis viitab viitade massiivile, mis viitavad täisarvu tüüpi väärtusele
int *(*pfp)(); // viit 'pfp', mis viitab funktsioonile, mis tagastab viida, mis viitab täisarvu tüüpi väärtusele
int **app[]; // massiiv viitasid 'app', mis viitavad täisarvu tüüpi väärtusele
int (*apa[])[];// massiiv viitasid 'apa', mis viitavad täisarvu tüüpi massiividele
int (*apf[])();// massiiv viitasid 'apf', mis viitavad funktsioonile, mis tagastab täisarvu tüüpi väärtuse
int ***fpp(); // funktsioon 'fpp', mis tagastab viida, mis viitab viidale, mis viitab viidale, mis viitab täisarvu tüüpi väärtusele
int (*fpa())[];// funktsioon 'fpa', mis tagastab viida, mis viitab täisarvu tüüpi massiivile
int (*fpf())();// funktsioon 'fpf', mis tagastab viida, mis viitab funktsioonile, mis tagastab täisarvu tüüpi väärtuse