1. Sissejuhatus
C-keeles on numbril „0” mitu tähendust ja see täidab erinevates olukordades erinevaid rolle.
Käesolevas artiklis selgitame samm-sammult numbrilist „0”, osutajat tähistavat „NULL”-i ning stringi lõppu tähistavat nullmärki („ ”).
Nende õige mõistmine on otseselt seotud vigade vältimise ja mälu haldamise parandamisega ning on seetõttu C-keele õppimisel äärmiselt oluline.
2. „0” ja „NULL” erinevus
Numbriline „0” tähistab täisarvu nulli, kuid osutaja „NULL” omab teistsugust tähendust.
2.1 Numbrina „0”
„0” käsitletakse lihtsalt numbrilise nullina, mis tähistab mälus konkreetset väärtust.
Seda „0”-i saab kasutada tingimuslausete või tsüklite lõpetamise tingimuste määramiseks.
Näiteks if(x == 0)
abil saab kontrollida, kas muutuja x
väärtus on null.
2.2 Osutajana „NULL”
„NULL” on spetsiaalne väärtus, mida kasutatakse osutajamuutujates.
C-keeles on „NULL” rolliks vältida kehtetuid mäluaadresside viiteid ning see on tavaliselt defineeritud kui „(void*)0”.
Näiteks kood int *ptr = NULL;
näitab, et osutaja ptr
ei viita millelegi (on tühi).
Kuna NULL ja numbriline 0 on erineva otstarbega, ei tohiks neid segamini ajada.
3. Nullmärk („ ”)
Stringi lõppu tähistab spetsiaalne märk „ ” (nullmärk). C-keeles, kus stringe käsitletakse massiividena, lisatakse massiivi lõppu nullmärk, et määrata stringi lõpp.
3.1 Nullmärk ja stringiliteraalid
Kui stringiliteraali käsitletakse massiivina, lisab C-keele kompilaator automaatselt lõputähemärgi „ ”.
Näiteks char str[] = "Hello";
puhul lisatakse massiivi str
lõppu „ ”, nii et mällu salvestatakse see kujul H-e-l-l-o-
kuue märgina.
3.2 Stringifunktsioonid ja nullmärgi roll
C-keeles on palju funktsioone stringide töötlemiseks. Need töötavad nullmärgi järgi, mistõttu vale lõputähemärgi määramine võib põhjustada ootamatut käitumist või mäluvigu.
Näiteks strlen
funktsioon loendab märke kuni nullmärgini ja tagastab stringi pikkuse.
4. „0” kasutamise programmeerimisvõtted
C-keeles on „0”-i kasutamiseks mitmeid tehnikaid. Allpool on toodud mõned näited massiivide initsialiseerimisest ja tingimuslausete optimeerimisest.
4.1 Massiivi initsialiseerimine
Kõik massiivi elemendid saab nullida memset
funktsiooniga.
Näiteks int arr[10]; memset(arr, 0, sizeof(arr));
nullib kõik massiivi arr
elemendid.
4.2 Tingimuslaused ja „0”
„0”-i kasutatakse sageli tingimuslausetes. Näiteks if (value)
tähendab, et tingimus kehtib ainult siis, kui value
ei ole null.
Selline lihtne süntaks parandab koodi loetavust ja efektiivsust.

5. Levinud vead ja ettevaatusabinõud
C-keeles aetakse sageli segamini „0”, „NULL” ja nullmärk („ ””), seetõttu on nende õige eristamine oluline. Samuti tuleb vältida nulliga jagamist, mis tekitab vea.
5.1 Ära sega NULL-i ja nullmärki
NULL on osutaja kehtetu väärtus, nullmärk („ ””) aga tähistab stringi lõppu.
Nullmärki kasutatakse ainult stringides, mitte muudes kontekstides.
5.2 Nulliga jagamise vea vältimine
Nulliga jagamine on määratlemata käitumine ja võib põhjustada programmi kokkujooksmise.
Enne jagamist tuleb alati kontrollida, et nimetaja ei oleks null.
6. Kokkuvõte
„0” kasutamise mõistmine C-keeles on otseselt seotud koodi stabiilsuse ja jõudlusega.
Numbriline „0”, osutaja kehtetu väärtus NULL ning stringi lõppu tähistav nullmärk on kõik erineva eesmärgiga. Nende õige eristamine ja kasutamine aitab luua töökindlaid programme.