2012-08-23 11 views
5

क्या सी में एक संरचना सूचक को न्यूल कास्टिंग करने का कोई फायदा है?सी में एक संरचना सूचक में नल कास्टिंग?

उदाहरण के लिए: PostgreSQL स्रोत से

typedef struct List 
{ 
.... 
} List; 

List *listPtr = ((List *) NULL) ; 

उदाहरण:

#define NIL      ((List *) NULL) 

http://doxygen.postgresql.org/pg__list_8h_source.html

+3

इससे मुझे कोई समझ नहीं आती है। आप बिना किसी कलाकार के किसी भी पॉइंटर को NULL असाइन कर सकते हैं। –

उत्तर

8

असाइनमेंट उदाहरण में स्पष्ट कलाकारों ने कोई उपयोगी अर्थ नहीं बनाया है। हालांकि, ऐसा लगता है कि आप वास्तव में #define NIL ((List *) NULL) मैक्रो के बारे में सवाल है, जिसका उपयोगिता असाइनमेंट से परे फैली हुई है।

एक जगह जहां यह समझ में आ सकता है वह तब होता है जब आप इसे एक वैरिएडिक फ़ंक्शन या प्रोटोटाइप के बिना घोषित फ़ंक्शन में पास करते हैं। मानक NULL को 0 या 0L या ((void *) 0) या किसी अन्य तरीके से परिभाषित किया जा सकता है, जिसका अर्थ है कि इस प्रकार के कम संदर्भों में इसका अलग-अलग अर्थ हो सकता है। एक स्पष्ट कलाकार यह सुनिश्चित करेगा कि इसे एक सूचक के रूप में सही ढंग से व्याख्या किया गया हो।

उदाहरण के लिए, यह वैध बनाता है

foo(NIL); 

साथ कॉल की जगह जबकि आम तौर पर अमान्य है (व्यवहार अपरिभाषित है)

void foo(); 

int main() { 
    foo(NULL); 
} 

void foo(List *p) { 
    /* whatever */ 
} 

4

वहाँ सी

में
एक struct सूचक को कास्टिंग शून्य का कोई लाभ है

कोई नहीं है। यह बस होना चाहिए:

List *listPtr = NULL; 

इसके अलावा, अगर वस्तु स्थिर भंडारण (जैसे कि, एक वैश्विक चर की तरह) है तुम भी शून्य करने के लिए इसे प्रारंभ करने की आवश्यकता नहीं है।

4

कोई शून्य शून्य नहीं है, यह उतना ही शून्य है जितना आप प्राप्त कर सकते हैं, आपको लगता है कि शून्य बहुत शून्य है लेकिन यह सिर्फ शून्य की तुलना में मूंगफली है।

+1

फिर भी इस नई पीढ़ी में कुछ एचएचजीटीटीजी प्रशंसकों ;-) –

+0

ओह, नहीं, दुर्भाग्य से नहीं। 'NULL' परिभाषित करने के तरीके के आधार पर 'आकार' (एनयूएलएल) '' 1' से '8' तक भिन्न हो सकता है। –

+0

@ जेन्सगस्टेड जो हमारे ब्रह्मांड में केवल न्यूल का प्रतिनिधित्व है। –