I C er NULL en symbolsk konstant, der altid peger på et ikke -eksisterende punkt i hukommelsen. Selvom mange programmører behandler det som lig med 0, er dette en forenkling, der kan snuble dig senere. Det er bedst at kontrollere dine pointers mod NULL direkte og bruge 0 i andre sammenhænge. Dette holder din kode ren og let at forstå, da du ved, at du arbejder med pointers hver gang du ser NULL.
Trin
Del 1 af 2: Udførelse af et nulkontrol
Trin 1. Brug standard nul check -koden
Følgende er den mest oplagte måde at skrive en nul check på. Vi vil bruge ptr i denne artikel som navnet på den markør, du tjekker.
-
hvis (ptr == NULL)
{
// kode hvis markøren er NULL
} andet {
// kode hvis ikke NULL
}
Trin 2. Test for enhver værdi, bortset fra NULL
Nogle gange er det mere bekvemt at teste for ulighed i stedet. Ingen overraskelser her:
-
hvis (ptr! = NULL) {
// kode hvis ikke NULL
}
Trin 3. Skriv NULL først for at undgå fejl (valgfrit)
Den største ulempe ved PTR == NULL -metoden er chancen for, at du ved et uheld skriver ptr = NULL i stedet og tildeler NULL -værdien til denne markør. Dette kan forårsage stor hovedpine. Da test for (in) lighed behandler operanderne symmetrisk, kan du få nøjagtig det samme resultat ved at skrive hvis (NULL == ptr) i stedet. Dette er mere stavefejl, da en utilsigtet NULL = ptr skaber en simpel kompileringsfejl.
Dette ser lidt akavet ud for nogle programmører, men det er helt gyldigt. Hvilken tilgang du bruger, afhænger bare af personlige præferencer, og hvor god din kompilator er til at opdage if (ptr = NULL) fejlen
Trin 4. Test om variablen er sand
En enkel hvis (ptr) tester, om ptr er SAND. Det returnerer FALSKT, hvis ptr er NULL, eller hvis ptr er 0. Sondringen er ikke vigtig i mange tilfælde, men vær opmærksom på, at disse ikke er identiske i alle arkitekturer.
Det modsatte af dette er hvis (! ptr), som returnerer SAND, hvis ptr er FALSK.
Del 2 af 2: Undgå fejl
Trin 1. Indstil en markør, før du søger efter NULL
En almindelig fejl er at antage, at en nyoprettet markør har en NULL -værdi. Det er ikke sandt. En ikke -tildelt markør peger stadig på en hukommelsesadresse, bare ikke en, du har angivet. Det er almindelig praksis at indstille nyoprettede eller nyligt frigivne pointer til NULL for at sikre, at du ikke bruger denne uhensigtsmæssige adresse ved et uheld.
-
Undgå denne fejl:
char *ptr;
hvis (ptr == NULL)
{
// Dette returnerer FALSKT. Markøren er blevet tildelt en gyldig værdi.
}
-
Skriv i stedet:
char *ptr = NULL; // Dette tildeler markøren til NULL
hvis (ptr == NULL)
{
// Dette returnerer SAND, hvis markøren ikke er blevet tildelt igen.
}
Trin 2. Vær opmærksom på funktioner, der kan returnere NULL
Hvis en funktion kan returnere NULL, skal du tænke over, om dette er en mulighed, og om det ville forårsage problemer senere i din kode. Her er et eksempel på malloc -funktionen ved hjælp af nulkontrollen (hvis (ptr)) for at sikre, at den kun håndterer pointer med gyldige værdier:
-
int * ptr = malloc (N * sizeof (int));
hvis (ptr) {
int i;
for (i = 0; i <N; ++ i)
ptr = i;
}
Trin 3. Forstå, at NULL er 0, men du skal altid bruge NULL i stedet for 0, når du arbejder med pointer for at få det klarere
Historisk set repræsenterede C NULL som tallet 0 (det vil sige 0x00). I dag kan det blive lidt mere kompliceret og varierer efter operativsystem. Du kan normalt kontrollere for NULL ved hjælp af ptr == 0, men der er hjørnesager, hvor dette kan forårsage et problem. Måske endnu vigtigere, gør brug af NULL det klart, at du arbejder med tips til andre, der læser din kode.