Programmeerimiskeel C/Viidad

Allikas: Vikiõpikud

Sissejuhatus[muuda]

Viit a viitab muutujale b. Pange tähele, et b talletab väärtust, samas kui a talletab b aadressi mälus (1462)

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:

  1. Dünaamiliste andmestruktuuride loomeprotsessis
  2. Väärtuste ülekandmist ühest funktsioonist teise
  3. 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

Väärtustama panemine[muuda]