Viit (informaatika)

Viit (inglise keeles pointer) on informaatikas muutuja, mille väärtus on mäluaadress. Viit tavaliselt viitab mõnele teise muutujale.

Viitasid kasutatakse näiteks siis, kui andmeid jagatakse programmi erinevate osade vahel, aga andmete kopeerimine on kulukas. Sel juhul on otstarbekas edastada vaid viit ehk mäluaadress, kus andmed paiknevad.

Viit ei pruugi alati viidata olemasolevale mälupesale. Seega tuleb hoolikalt jälgida, et viit oleks kasutamisel õigesti väärtustatud. Kõrgema taseme keeled (nt. Java ja Python) väldivad viitade kasutamist, sest olematu või vale mälupesa lugemine või kirjutamine võib programmi kokku jooksutada.

Et vältida väärtustamata viida kasutamist, antakse viidale tihti algväärtus 0. Seda nimetatakse nullviidaks (inglise k. null pointer). Enamikus süsteemides võib eeldada, et mäluaadressi 0 ei kasutata. Nullviidaga saab märkida ka näiteks listi lõppu või objekti puudumist.

Viidad keeltes C ja C++ 
Programmeerimiskeeltes C ja C++ defineeritakse viit tärni (*) abil, mis asub muutuja tüübi ja nime vahel. Iga viit on seotud kindla andmetüübiga. Sümbol & muutuja nime ees tähistab selle aadressi.
int a = 2;    // a ja b on täisarvu tüüpi muutujad
int b = 3;
int *p = &a;  // p on viit muutujale a
{| class="wikitable"
! Muutuja !! Address !! Väärtus
|-
| a || 0x8130 || 0x00000002
|-
| b || 0x8134 || 0x00000003
|-
| p || 0x8138 || 0x00008130
|}
Viida kaudu saab muuta viidatava muutuja väärtust. Tärn viida ees tähendabki, et kasutatakse viidatavat muutujat.
*p = 6;
{| class="wikitable"
! Muutuja !! Aadress !! Väärtus
|-
| a || 0x8130 || 0x00000006
|-
| b || 0x8134 || 0x00000003
|-
| p || 0x8138 || 0x00008130
|}
Viida enda väärtust muutes saab viidata teistele muutujatele.
p = &b;
{| class="wikitable"
! Muutuja !! Aadress !! Väärtus
|-
| a || 0x8130 || 0x00000006
|-
| b || 0x8134 || 0x00000003
|-
| p || 0x8138 || 0x00008134
|}
Viida kaudu saab ka lugeda viidatavaid muutujaid.
a = *p;
{| class="wikitable"
! Muutuja !! Aadress !! Väärtus
|-
| a || 0x8130 || 0x00000003
|-
| b || 0x8134 || 0x00000003
|-
| p || 0x8138 || 0x00008134
|}

Andmetüübid

sv:Datatyp#Pekare och referenstyper