Ako skontrolovať nulu v C: 7 krokov (s obrázkami)

Obsah:

Ako skontrolovať nulu v C: 7 krokov (s obrázkami)
Ako skontrolovať nulu v C: 7 krokov (s obrázkami)

Video: Ako skontrolovať nulu v C: 7 krokov (s obrázkami)

Video: Ako skontrolovať nulu v C: 7 krokov (s obrázkami)
Video: Word - Ilustrácie - Obrázky - Ako do Wordu pridať obrázky a ako s nimi pracovať 2024, Smieť
Anonim

V C je NULL symbolická konštanta, ktorá vždy ukazuje na neexistujúci bod v pamäti. Napriek tomu, že mnoho programátorov to považuje za rovné 0, je to zjednodušenie, ktoré vás môže neskôr podraziť. Najlepšie je skontrolovať svoje ukazovatele voči NULL priamo a použiť 0 v iných kontextoch. Vďaka tomu bude váš kód čistý a ľahko zrozumiteľný, pretože budete vedieť, že pracujete s ukazovateľmi vždy, keď uvidíte NULL.

Kroky

Časť 1 z 2: Vykonanie nulovej kontroly

V kroku C začiarknite políčko Null
V kroku C začiarknite políčko Null

Krok 1. Použite štandardný nulový kontrolný kód

Nasleduje najzrejmejší spôsob, ako napísať nulovú kontrolu. Použijeme ptr v tomto článku ako názov ukazovateľa, ktorý kontrolujete.

  • ak (ptr == NULL)

    {

    // kód, ak je ukazovateľ NULL

    } else {

    // kód, ak nie NULL

    }

V kroku C zaškrtnite Null
V kroku C zaškrtnite Null

Krok 2. Test na akúkoľvek hodnotu, ale NULL

Niekedy je namiesto toho pohodlnejšie testovať nerovnosť. Tu žiadne prekvapenie:

  • if (ptr! = NULL) {

    // kód, ak nie NULL

    }

V kroku C skontrolujte Null
V kroku C skontrolujte Null

Krok 3. Napíšte NULL, aby ste sa vyhli chybám (voliteľné)

Hlavnou nevýhodou metódy PTR == NULL je šanca, že namiesto toho omylom napíšete ptr = NULL a priradíte tomuto ukazovateľu hodnotu NULL. To môže spôsobiť veľkú bolesť hlavy. Pretože testovanie (ne) rovnosti zaobchádza s operandmi symetricky, môžete presne rovnaký výsledok dosiahnuť písaním ak (NULL == ptr) namiesto. Toto je odolnejšie voči preklepom, pretože náhodný NULL = ptr vytvára jednoduchú chybu pri kompilácii.

Niektorým programátorom to pripadá trochu nepríjemné, ale je to úplne platné. To, ktorý prístup použijete, závisí od osobných preferencií a od toho, ako dobre váš kompilátor dokáže rozpoznať chybu if (ptr = NULL)

V kroku 4 zaškrtnite Null
V kroku 4 zaškrtnite Null

Krok 4. Otestujte, či je premenná pravdivá

Jednoduchý ak (ptr) testuje, či je ptr PRAVDA. Vráti hodnotu FALSE, ak ptr je NULL alebo ak je ptr 0. Rozdiel v mnohých prípadoch nezáleží, ale uvedomte si, že tieto nie sú vo všetkých architektúrach totožné.

Opak je tento ak (! ptr), ktorý vráti hodnotu TRUE, ak je ptr FALSE.

Časť 2 z 2: Vyhýbanie sa chybám

V kroku C skontrolujte Null
V kroku C skontrolujte Null

Krok 1. Pred kontrolou NULL nastavte ukazovateľ

Jednou z bežných chýb je predpokladať, že novo vytvorený ukazovateľ má hodnotu NULL. To nie je pravda. Nepriradený ukazovateľ stále ukazuje na adresu pamäte, ale nie na adresu, ktorú ste zadali. Je bežnou praxou nastaviť novovytvorené alebo novo uvoľnené ukazovatele na NULL, aby ste sa presvedčili, že túto nepotrebnú adresu nepoužijete náhodou.

  • Vyhnite sa tejto chybe:

    char *ptr;

    ak (ptr == NULL)

    {

    // To vráti FALSE. Ukazovateľovi bola priradená platná hodnota.

    }

  • Namiesto toho napíšte:

    char *ptr = NULL; // Toto priradí ukazovateľ na NULL

    ak (ptr == NULL)

    {

    // Toto vráti TRUE, ak ukazovateľ nebol znovu priradený.

    }

V kroku 6 začiarknite políčko Null
V kroku 6 začiarknite políčko Null

Krok 2. Dávajte pozor na funkcie, ktoré by mohli vrátiť NULL

Ak môže funkcia vracať hodnotu NULL, zamyslite sa nad tým, či je to možné a či to nespôsobí problémy s kódom neskôr. Tu je príklad funkcie malloc používajúcej null check (ak (ptr)), aby sa zabezpečilo, že spracováva iba ukazovatele s platnými hodnotami:

  • int * ptr = malloc (N * sizeof (int));

    if (ptr) {

    int i;

    pre (i = 0; i <N; ++ i)

    ptr = i;

    }

V kroku C skontrolujte Null
V kroku C skontrolujte Null

Krok 3. Pochopte, že NULL je 0, ale pri práci s ukazovateľmi by ste kvôli prehľadnosti mali vždy používať NULL namiesto 0

Historicky C reprezentovalo NULL ako číslo 0 (to znamená 0x00). V dnešnej dobe to môže byť trochu komplikovanejšie a líši sa podľa operačného systému. NULL môžete zvyčajne skontrolovať pomocou ptr == 0, Existujú však rohové prípady, kde to môže spôsobiť problém. Ešte dôležitejšie je, že pomocou NULL je zrejmé, že pracujete s ukazovateľmi pre ostatných, ktorí čítajú váš kód.

Tipy

Toto nahlásenie môžete použiť počas slučiek ako všetky ostatné: while (NULL == ptr) {

Odporúča: