2011-09-30 20 views

उत्तर

7

आईएसओ/आईईसी 9899: मान 0 या लिखने के लिए शून्य * इस तरह के एक अभिव्यक्ति कलाकारों के साथ 6.3.2.3 Pointers

3 एक पूर्णांक निरंतर अभिव्यक्ति में TC2 राज्यों, एक अशक्त सूचक constant.55 कहा जाता है) एक अशक्त सूचक लगातार एक सूचक प्रकार, जिसके परिणामस्वरूप सूचक में बदल जाती है, तो एक अशक्त सूचक कहा जाता है, किसी भी वस्तु या कार्य करने के लिए एक सूचक को असमान तुलना करने के लिए गारंटी है

मैक्रो शून्य फैलता एक कार्यान्वयन-परिभाषित शून्य सूचक स्थिर करने के लिए।

कोई भी दो शून्य पॉइंटर्स बराबर की तुलना करेंगे।

6

हां वहाँ है। मानक निर्देश देता है कि NULL हमेशा अमान्य स्मृति को इंगित करता है। लेकिन यह नहीं बताता है कि सूचक का पूर्णांक प्रतिनिधित्व 0 होना चाहिए। मैंने कभी भी कार्यान्वयन नहीं किया है जिसके लिए NULL 0 से अधिक था, लेकिन यह मानक द्वारा अनिवार्य नहीं है।

ध्यान दें कि एक सूचक के लिए शाब्दिक 0 असाइन करने का अर्थ यह नहीं है कि पॉइंटर 0 के पूर्णांक प्रतिनिधित्व को मानता है। इसका मतलब है कि विशेष शून्य सूचक मान सूचक चर को आवंटित किया जाता है।

+1

प्रासंगिक: http://c-faq.com/null/machexamp.html – nos

+7

भी ध्यान रखें कि 'पूर्णांक * ptr = 0;' हमेशा एक विशेष शासन के लिए एक नल पॉइंटर धन्यवाद में परिणाम है, क्योंकि '0' एक है तथाकथित "शून्य सूचक स्थिर" कहा जाता है। यह तब भी होता है जब आप कुछ असाधारण कार्यान्वयन पर हों, जहां एक शून्य सूचक 0 से अलग है। हालांकि, 'int i = 0; int * ptr = (int *) i; 'जरूरी नहीं है कि नल पॉइंटर में न हो। तो आप आमतौर पर एक संदर्भ में छोड़कर "एक सूचक जो 0 पते को इंगित करता है" का सामना नहीं करेगा जहां यह एक शून्य सूचक है, लेकिन मानक इसे अनुमति देता है। –

+0

@ डेविड, आपके दूसरे पैरा में आपका मतलब है "नहीं", है ना? और 'NULL' मानक की परिभाषा द्वारा हमेशा '0' मान होता है, जो कर्नेल में एक मान्य पता हो सकता है। इसलिए किसी को एक नल पॉइंटर के आंतरिक प्रतिनिधित्व से अधिक स्पष्ट रूप से 'NULL' को अलग करना चाहिए, जैसा कि आप कहते हैं कि कुछ अलग हो सकता है। –

3

एक सूचक संदर्भ में शाब्दिक 0 का मूल्यांकन NULL के समान है। NULL पॉइंटर का प्रतिनिधित्व करने के लिए संकलक का उपयोग करने वाला कुछ भी पैटर्न छिपा हुआ है।

1

पुराने comp.lang.c FAQ में शून्य सूचक पर एक बड़ा अनुभाग है और यह पढ़ने योग्य है।

comp.lang.c null pointers

0

विचार है कि एक NULL सूचक किसी तरह एक स्मृति क्षेत्र है कि अवैध है का प्रतिनिधित्व करना चाहिए है।
इसलिए जब निम्न मेमोरी सेगमेंट में ओएस कोड मैप किया गया है, तो 0 का मान उपयोग किया गया है (नल पॉइंटर का प्रतिनिधित्व करने के लिए) क्योंकि स्मृति में यह क्षेत्र उपयोगकर्ता के प्रोग्राम से संबंधित नहीं है लेकिन ओएस कोड में मैप किया गया है।

संबंधित मुद्दे