एक बिंदु जो यहां दिए गए अधिकांश उत्तरों को संबोधित नहीं कर रहा है, कम से कम स्पष्ट रूप से नहीं है, यह है कि एक अशक्त सूचक एक ऐसा मूल्य है जो निष्पादन के दौरान मौजूद है, और एक शून्य सूचक स्थिरांक एक सिंथैटिक निर्माण है जो सी स्रोत कोड में मौजूद है।
एक अशक्त सूचक स्थिरांक , जैसा कि कार्लसन का उत्तर सही बताता है, या तो मान 0 (एक साधारण 0
सबसे सामान्य उदाहरण है) के साथ पूर्णांक स्थिर अभिव्यक्ति है , या इस तरह की अभिव्यक्ति void*
(जैसे (void*)0
)।
NULL
एक मैक्रो है, जिसे <stddef.h>
कई अन्य मानक हेडर में परिभाषित किया गया है , जो कार्यान्वयन-परिभाषित नल पॉइंटर निरंतर तक फैलता है । विस्तार आम तौर पर 0
या ((void*)0)
(बाहरी कोष्ठक अन्य भाषा नियमों को पूरा करने के लिए आवश्यक हैं)।
तो एक शाब्दिक 0
, जब एक ऐसे संदर्भ में उपयोग किया जाता है जिसे सूचक प्रकार की अभिव्यक्ति की आवश्यकता होती है, तो हमेशा एक null pointer
, यानी, एक अद्वितीय सूचक मूल्य का मूल्यांकन करता है जो किसी वस्तु को इंगित नहीं करता है। यह अशक्त सूचक के प्रतिनिधित्व के बारे में कुछ भी नहीं बताता है । अशक्त बिंदुओं को आमतौर पर ऑल-बिट्स-शून्य के रूप में दर्शाया जाता है, लेकिन उन्हें कुछ भी कहा जा सकता है। लेकिन भले ही एक अशक्त सूचक के रूप में प्रतिनिधित्व किया है , या अभी भी एक अशक्त सूचक स्थिर है ।0xDEADBEEF
0
(void*)0
इस उत्तर के लिए stackoverflow पर सवाल यह अच्छी तरह से शामिल किया गया।
इसका तात्पर्य, अन्य बातों के अलावा, यह memset()
या calloc()
, जो मेमोरी के क्षेत्र को ऑल-बिट्स-जीरो पर सेट कर सकता है, जरूरी नहीं कि उस क्षेत्र में किसी बिंदु को शून्य बिंदुओं पर सेट किया जा सके। वे अधिकांश कार्यान्वयन पर ऐसा करने की संभावना रखते हैं, लेकिन भाषा इसकी गारंटी नहीं देती है।
मैं क्यों इस सवाल का डुप्लिकेट नहीं माना जाता है पता नहीं है यह एक , या कैसे इसे यहाँ सामयिक है।