In C is NULL 'n simboliese konstante wat altyd dui op 'n nie -bestaande punt in die geheue. Alhoewel baie programmeerders dit as gelyk aan 0 beskou, is dit 'n vereenvoudiging wat u later kan laat struikel. Dit is die beste om u wenke direk teen NULL na te gaan en 0 in ander kontekste te gebruik. Dit hou u kode skoon en maklik om te verstaan, aangesien u sal weet dat u elke keer as u NULL sien, met wenke werk.
Stappe
Deel 1 van 2: 'n Nulkontrole uitvoer
Stap 1. Gebruik die standaard nul tjek kode
Die volgende is die duidelikste manier om 'n nul tjek te skryf. Ons sal gebruik ptr in hierdie artikel as die naam van die wyser wat u nagaan.
-
as (ptr == NULL)
{
// kode as wyser NULL is
} anders {
// kode indien nie NULL nie
}
Stap 2. Toets vir enige waarde behalwe NULL
Soms is dit geriefliker om eerder op ongelykheid te toets. Geen verrassings hier nie:
-
as (ptr! = NULL) {
// kode indien nie NULL nie
}
Stap 3. Skryf eers die NULL neer om foute te vermy (opsioneel)
Die grootste nadeel van die PTR == NULL -metode is die kans dat u per ongeluk ptr = NULL tik deur die NULL -waarde aan die wyser toe te ken. Dit kan groot hoofpyn veroorsaak. Aangesien die toetsing van (in) gelykheid die operande simmetries behandel, kan u presies dieselfde resultaat kry deur te skryf as (NULL == ptr) in plaas daarvan. Dit is meer tikbestand, aangesien 'n toevallige NULL = ptr 'n eenvoudige opstelfout veroorsaak.
Dit lyk vir sommige programmeerders 'n bietjie ongemaklik, maar dit is heeltemal geldig. Watter benadering u gebruik, hang net af van persoonlike voorkeur en hoe goed u samesteller die fout as (ptr = NULL) kan opspoor
Stap 4. Toets of die veranderlike waar is
'N Eenvoudige as (ptr) toets of ptr WAAR is. Dit sal ONWAAR terugkeer as ptr NUL is, of as ptr 0. Die onderskeid maak in baie gevalle nie saak nie, maar wees bewus daarvan dat dit nie in alle argitekture identies is nie.
Die omgekeerde hiervan is as (! ptr), wat WAAR sal terugkeer as ptr ONWAAR is.
Deel 2 van 2: Vermy foute
Stap 1. Stel 'n wyser voordat u na NULL kyk
'N Algemene fout is om aan te neem dat 'n nuutgeskepte wyser 'n NULL -waarde het. Dit is nie waar nie. 'N Wyser wat nie toegewys is nie, wys steeds na 'n geheue -adres, net nie een wat u gespesifiseer het nie. Dit is 'n algemene gebruik om nuutgeskepte of nuutvrygestelde aanwysers op NULL in te stel om seker te maak dat u nie hierdie nuttelose adres per ongeluk gebruik nie.
-
Vermy hierdie fout:
char *ptr;
as (ptr == NULL)
{
// Dit sal ONWAAR terugkeer. 'N Geldige waarde is aan die wyser toegeken.
}
-
Skryf eerder:
char *ptr = NULL; // Dit ken die wyser toe aan NULL
as (ptr == NULL)
{
// Dit sal WAAR terugkeer as die wyser nie weer toegewys is nie.
}
Stap 2. Gee aandag aan funksies wat NULL kan teruggee
As 'n funksie NULL kan terugstuur, dink dan na of dit moontlik is, en of dit later probleme in u kode kan veroorsaak. Hier is 'n voorbeeld van die malloc -funksie met behulp van die null -tjek (as (ptr)) om te verseker dat dit slegs wenke met geldige waardes hanteer:
-
int * ptr = malloc (N * sizeof (int));
as (ptr) {
int ek;
vir (i = 0; i <N; ++ i)
ptr = i;
}
Stap 3. Verstaan dat NULL 0 is, maar u moet altyd NULL in plaas van 0 gebruik as u met wysers werk vir duidelikheid
Histories verteenwoordig C NULL as die getal 0 (dit wil sê 0x00). Tans kan dit 'n bietjie ingewikkelder word, en dit hang af van die bedryfstelsel. U kan gewoonlik op NULL kyk ptr == 0, maar daar is gevalle waar dit 'n probleem kan veroorsaak. Miskien belangriker, dit is duidelik dat die gebruik van NULL duidelik is dat u met wenke werk vir ander mense wat u kode lees.