C, NULL yra simbolinė konstanta, kuri visada nurodo į neegzistuojantį tašką atmintyje. Nors daugelis programuotojų jį laiko lygiu 0, tai yra supaprastinimas, kuris vėliau gali jus suklupti. Geriausia tiesiogiai patikrinti savo rodykles prieš NULL, o kitose situacijose naudoti 0. Taip jūsų kodas bus švarus ir lengvai suprantamas, nes žinosite, kad dirbate su rodyklėmis kiekvieną kartą, kai matote NULL.
Žingsniai
1 dalis iš 2: Nulinio patikrinimo atlikimas
1 veiksmas. Naudokite standartinį nulinio patikrinimo kodą
Toliau pateikiamas akivaizdžiausias būdas parašyti nulinį čekį. Mes naudosime ptr šiame straipsnyje kaip rodyklės, kurią tikrinate, pavadinimas.
-
jei (ptr == NULL)
{
// kodas, jei žymeklis yra NULL
} Kitas {
// kodas, jei ne NULL
}
Žingsnis 2. Patikrinkite bet kokią vertę, išskyrus NULL
Kartais patogiau išbandyti nelygybę. Čia nėra staigmenų:
-
jei (ptr! = NULL) {
// kodas, jei ne NULL
}
Žingsnis 3. Pirmiausia užrašykite NULL, kad išvengtumėte klaidų (neprivaloma)
Pagrindinis PTR == NULL metodo trūkumas yra tikimybė, kad netyčia įvesite ptr = NULL, priskirdami šiai žymekliui reikšmę NULL. Tai gali sukelti didelį galvos skausmą. Kadangi (ne) lygybės testavimas operandus vertina simetriškai, rašydami galite gauti tą patį rezultatą jei (NULL == ptr) vietoj to. Tai atsparesnė rašybos klaidoms, nes atsitiktinis NULL = ptr sukuria paprastą kompiliavimo klaidą.
Kai kuriems programuotojams tai atrodo šiek tiek nepatogu, tačiau tai visiškai teisinga. Kurį metodą naudosite, priklauso tik nuo asmeninių pageidavimų ir nuo to, kaip gerai jūsų kompiliatorius gali aptikti klaidą if (ptr = NULL)
Žingsnis 4. Patikrinkite, ar kintamasis yra teisingas
Paprastas jei (ptr) patikrina, ar ptr yra TIESA. Jei ptr yra NULL, arba jei ptr yra 0, jis grąžins FALSE. Skirtumas daugeliu atvejų nesvarbus, tačiau atminkite, kad jie nėra vienodi visose architektūrose.
Tai yra atvirkščiai jei (! ptr), kuris grąžins TRUE, jei ptr yra FALSE.
2 dalis iš 2: Klaidų vengimas
1 žingsnis Prieš nustatydami NULL, nustatykite žymeklį
Viena dažna klaida yra manyti, kad naujai sukurtas žymeklis turi NULL reikšmę. Tai netiesa. Nepriskirtas žymeklis vis tiek nurodo atminties adresą, tik ne tą, kurį nurodėte. Įprasta naujai sukurtus arba naujai išlaisvintus rodiklius nustatyti į NULL, kad įsitikintumėte, jog atsitiktinai nenaudojate šio netinkamo adreso.
-
Venkite šios klaidos:
char *ptr;
jei (ptr == NULL)
{
// Tai grąžins FALSE. Rodyklei priskirta teisinga reikšmė.
}
-
Vietoj to rašykite:
char *ptr = NULL; // Tai priskiria žymeklį NULL
jei (ptr == NULL)
{
// Tai grąžins TRUE, jei žymeklis nebus priskirtas iš naujo.
}
2 žingsnis. Atkreipkite dėmesį į funkcijas, kurios gali grąžinti NULL
Jei funkcija gali grąžinti NULL, pagalvokite, ar tai yra galimybė, ir ar tai vėliau nesukels problemų jūsų kode. Štai netinkamos funkcijos pavyzdys naudojant nulinį patikrinimą (jei (ptr)), kad būtų užtikrinta, jog ji apdoroja tik rodykles, turinčias galiojančias reikšmes:
-
int * ptr = malloc (N * sizeof (int));
if (ptr) {
int i;
(i = 0; i <N; ++ i)
ptr = i;
}
Žingsnis 3. Supraskite, kad NULL yra 0, tačiau dirbdami su rodyklėmis aiškumo dėlei visada turėtumėte naudoti NULL, o ne 0
Istoriškai C reiškė NULL kaip skaičių 0 (tai yra 0x00). Šiais laikais tai gali būti šiek tiek sudėtingiau ir skiriasi priklausomai nuo operacinės sistemos. Paprastai NULL galite patikrinti naudodami ptr == 0, tačiau yra kampinių atvejų, kai tai gali sukelti problemų. Galbūt dar svarbiau, kad naudojant NULL akivaizdu, kad dirbate su rodyklėmis kitiems žmonėms, skaitantiems jūsų kodą.