C, NULL ir simboliska konstante, kas vienmēr norāda uz neeksistējošu punktu atmiņā. Lai gan daudzi programmētāji to uzskata par vienādu ar 0, tas ir vienkāršojums, kas vēlāk var jūs aizkustināt. Vislabāk ir tieši pārbaudīt savus rādītājus pret NULL un izmantot 0 citos kontekstos. Tādējādi jūsu kods ir tīrs un viegli saprotams, jo jūs zināt, ka strādājat ar rādītājiem katru reizi, kad redzat NULL.
Soļi
1. daļa no 2: nulles pārbaudes veikšana
1. darbība. Izmantojiet standarta nulles pārbaudes kodu
Tālāk ir sniegts visredzamākais veids, kā uzrakstīt nulles čeku. Mēs izmantosim ptr šajā rakstā kā rādītāja nosaukums, kuru pārbaudāt.
-
ja (ptr == NULL)
{
// kods, ja rādītājs ir NULL
} vēl {
// kods, ja ne NULL
}
2. solis. Pārbaudiet, vai nav vērtības, izņemot NULL
Dažreiz ērtāk ir pārbaudīt nevienlīdzību. Šeit nav pārsteigumu:
-
ja (ptr! = NULL) {
// kods, ja ne NULL
}
3. solis. Vispirms uzrakstiet NULL, lai izvairītos no kļūdām (pēc izvēles)
Galvenais PTR == NULL metodes trūkums ir iespēja nejauši ierakstīt ptr = NULL, piešķirot šim rādītājam vērtību NULL. Tas var izraisīt lielas galvassāpes. Tā kā (ne) vienlīdzības pārbaude operandus izskata simetriski, rakstot, jūs varat iegūt tieši tādu pašu rezultātu ja (NULL == ptr) tā vietā. Tas ir izturīgāks pret drukas kļūdām, jo nejaušs NULL = ptr rada vienkāršu kompilācijas kļūdu.
Dažiem programmētājiem tas šķiet nedaudz neērti, taču tas ir pilnīgi derīgi. Jūsu izvēlētā pieeja ir atkarīga no personīgajām vēlmēm un no tā, cik labi jūsu kompilators spēj atklāt kļūdu if (ptr = NULL)
4. solis. Pārbaudiet, vai mainīgais ir patiess
Vienkāršs ja (ptr) pārbauda, vai ptr ir PATIESA. Tas atgriezīs FALSE, ja ptr ir NULL vai ja ptr ir 0. Daudzos gadījumos atšķirībai nav nozīmes, taču ņemiet vērā, ka tās nav vienādas visās arhitektūrās.
Apvērsums ir šāds ja (! ptr), kas atgriezīs TRUE, ja ptr ir FALSE.
2. daļa no 2: izvairīšanās no kļūdām
1. solis. Pirms NULL pārbaudes pārbaudiet, iestatiet rādītāju
Viena izplatīta kļūda ir pieņemt, ka jaunizveidotajam rādītājam ir NULL vērtība. Tā nav taisnība. Nepiešķirts rādītājs joprojām norāda uz atmiņas adresi, tikai ne uz jūsu norādīto. Ir ierasta prakse jaunizveidotos vai nesen atbrīvotos rādītājus iestatīt uz NULL, lai pārliecinātos, ka nejauši neizmantojat šo nelietderīgo adresi.
-
Izvairieties no šīs kļūdas:
char *ptr;
ja (ptr == NULL)
{
// Tas atgriezīs FALSE. Rādītājam ir piešķirta derīga vērtība.
}
-
Tā vietā rakstiet:
char *ptr = NULL; // Tas piešķir rādītāju NULL
ja (ptr == NULL)
{
// Tas atgriezīs TRUE, ja rādītājs nav piešķirts no jauna.
}
2. solis. Pievērsiet uzmanību funkcijām, kas varētu atgriezt NULL
Ja funkcija var atgriezt NULL, padomājiet, vai tā ir iespēja un vai tas vēlāk radīs problēmas jūsu kodā. Šeit ir malloc funkcijas piemērs, izmantojot nulles pārbaudi (ja (ptr)), lai nodrošinātu, ka tā apstrādā tikai norādes ar derīgām vērtībām:
-
int * ptr = malloc (N * sizeof (int));
ja (ptr) {
int i;
par (i = 0; i <N; ++ i)
ptr = i;
}
3. solis. Saprotiet, ka NULL ir 0, bet, strādājot ar rādītājiem, skaidrības labad vienmēr jāizmanto NULL, nevis 0
Vēsturiski C attēloja NULL kā skaitli 0 (tas ir, 0x00). Mūsdienās tas var kļūt nedaudz sarežģītāks un atšķiras atkarībā no operētājsistēmas. Parasti NULL var pārbaudīt, izmantojot ptr == 0, bet ir gadījumi, kad tas var radīt problēmas. Varbūt vēl svarīgāk ir tas, ka, izmantojot NULL, kļūst skaidrs, ka strādājat ar norādēm citiem cilvēkiem, kuri lasa jūsu kodu.