Programmeerimiskeel C/Viidad
Sissejuhatus
muudaViidad 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
muudaViitasid 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