Programmeerimiskeel C/Viidad

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