C- ում NULL- ը խորհրդանշական հաստատուն է, որը միշտ մատնանշում է հիշողության մեջ գոյություն չունեցող կետ: Չնայած այն բանին, որ շատ ծրագրավորողներ այն համարում են 0 -ի հավասար, սա պարզեցում է, որը կարող է հետագայում ձեզ գայթակղել: Ավելի լավ է ուղղակիորեն ստուգեք ձեր ցուցիչները NULL- ի դեմ և 0 -ն օգտագործեք այլ համատեքստերում: Սա ձեր կոդը պահում է մաքուր և հեշտ հասկանալի, քանի որ դուք կիմանաք, որ ցուցիչներով եք աշխատում ամեն անգամ, երբ տեսնում եք NULL:
Քայլեր
2 -րդ մաս 1 -ից. Չեղյալ ստուգում կատարել
Քայլ 1. Օգտագործեք ստանդարտ անվավեր ստուգման ծածկագիրը:
Ստորև բերված է անվավեր չեկ գրելու ամենաակնառու եղանակը: Մենք կօգտագործենք ptr այս հոդվածում որպես ցուցիչի անուն, որը դուք ստուգում եք:
-
եթե (ptr == NULL)
{
// կոդը, եթե ցուցիչը NULL է
} ուրիշ {
// կոդը, եթե ոչ NULL
}
Քայլ 2. Փորձեք ցանկացած արժեքի համար, բացի NULL- ից:
Երբեմն ավելի հարմար է դրա փոխարեն ստուգել անհավասարությունը: Այստեղ անակնկալներ չկան.
-
եթե (ptr! = NULL) {
// կոդը, եթե ոչ NULL
}
Քայլ 3. Սխալներից խուսափելու համար նախ գրեք NULL- ը (ըստ ցանկության):
PTR == NULL մեթոդի հիմնական թերությունն այն հնարավորությունն է, որ դուք փոխարենը պատահաբար մուտքագրեք ptr = NULL ՝ այդ ցուցիչին վերագրելով NULL արժեքը: Սա կարող է մեծ գլխացավ առաջացնել: Քանի որ (ոչ) հավասարության փորձարկումը սիմետրիկորեն վերաբերվում է օպերանդներին, դուք կարող եք ստանալ նույն արդյունքը ՝ գրելով եթե (NULL == ptr) փոխարենը. Սա ավելի շատ տառասխալների դիմացկուն է, քանի որ պատահական NULL = ptr- ը ստեղծում է պարզ կազմման սխալ:
Սա որոշ ծրագրավորողների համար մի փոքր անհարմար է թվում, բայց դա լիովին վավեր է: Թե որ մոտեցումն եք օգտագործում, ուղղակի կախված է անձնական նախասիրություններից, և որքանով է ձեր կոմպիլյատորը հայտնաբերում if (ptr = NULL) սխալը:
Քայլ 4. Ստուգեք, արդյոք փոփոխականը ճիշտ է:
Մի պարզ եթե (ptr) ստուգում է, թե արդյոք ptr- ը UEԻՇՏ է: Այն կվերադառնա ԿԵSE, եթե ptr- ը NULL է, կամ եթե ptr- ն է 0. Տարբերությունը շատ դեպքերում նշանակություն չունի, բայց տեղյակ եղեք, որ դրանք բոլոր ճարտարապետություններում նույնական չեն:
Սրա հակառակն է եթե (! ptr), որը կվերադառնա UEԻՇՏ, եթե ptr- ը ԿԵSE Է:
2 -րդ մաս 2 -ից. Սխալներից խուսափելը
Քայլ 1. Նախքան NULL- ի ստուգումը ցուցիչ դնել:
Սովորական սխալներից մեկն այն է, որ ենթադրենք, որ նորաստեղծ ցուցիչը ունի NULL արժեք: Սա ճիշտ չէ. Չնշանակված ցուցիչը դեռ մատնանշում է հիշողության հասցեն, այլ ոչ թե այն, որը դուք նշել եք: Սովորական պրակտիկա է `նորաստեղծ կամ նոր ազատված ցուցիչները դնել NULL- ի վրա` համոզվելու համար, որ դուք պատահաբար չեք օգտագործում այս անօգուտ հասցեն:
-
Խուսափեք այս սխալից.
char *ptr;
եթե (ptr == NULL)
{
// Սա կվերադառնա FALSE: Theուցանիշին տրվել է վավեր արժեք:
}
-
Փոխարենը գրեք.
char *ptr = NULL; // Սա ցուցիչը վերագրում է NULL- ին
եթե (ptr == NULL)
{
// Սա կվերադառնա TRUE, եթե ցուցիչը չի վերանշանակվել:
}
Քայլ 2. Ուշադրություն դարձրեք այն գործառույթներին, որոնք կարող են վերադարձնել NULL- ը:
Եթե գործառույթը կարող է վերադարձնել NULL- ը, մտածեք, թե արդյոք դա հնարավոր է, և արդյոք դա հետագայում խնդիրներ կառաջացնի ձեր ծածկագրում: Ահա malloc ֆունկցիայի օրինակ `օգտագործելով զրոյական ստուգումը (եթե (ptr)) ապահովելու համար, որ այն վարում է միայն վավեր արժեքներով ցուցիչներ.
-
int * ptr = malloc (N * sizeof (int));
եթե (ptr) {
int i;
համար (i = 0; i <N; ++ i)
ptr = i;
}
Քայլ 3. Հասկացեք, որ NULL- ը 0 է, բայց հստակության համար ցուցիչներով աշխատելիս միշտ պետք է օգտագործել NULL- ը 0 -ի փոխարեն:
Պատմականորեն C- ն NULL- ը ներկայացնում էր որպես 0 թիվ (այսինքն ՝ 0x00): Մեր օրերում այն կարող է մի փոքր ավելի բարդ լինել և տարբերվում է ըստ օպերացիոն համակարգի: Սովորաբար կարող եք ստուգել NULL- ի օգտագործումը ptr == 0, բայց կան անկյունային դեպքեր, երբ դա կարող է խնդիր առաջացնել: Թերևս ավելի կարևոր է, որ NULL- ի օգտագործումը ակնհայտ է դարձնում, որ դուք աշխատում եք ձեր ծածկագիրը կարդացող այլ մարդկանց ցուցիչների հետ: