अपसंदर्भन सिर्फ एक दिए गए पते पर स्मृति मूल्य पढ़ने का मतलब है। तो जब आपके पास कुछ करने के लिए पॉइंटर होता है, तो को संदर्भित करें पॉइंटर का मतलब है कि पॉइंटर इंगित करने वाले डेटा को पढ़ने या लिखना है।
सी में, unary *
ऑपरेटर dereferencing ऑपरेटर है।यदि x
एक सूचक है, तो *x
x
अंक है। यूनरी &
ऑपरेटर पता ऑपरेटर है। यदि x
कुछ भी है, तो &x
वह पता है जिस पर x
स्मृति में संग्रहीत है। *
और &
ऑपरेटरों एक दूसरे के प्रतिलोम हैं: अगर x
किसी भी डेटा है, और y
किसी भी सूचक है, तो इन समीकरणों हमेशा सच हैं:
*(&x) == x
&(*y) == y
एक नल पॉइंटर एक सूचक है कि किसी भी वैध को इंगित नहीं करता है डेटा (लेकिन यह एकमात्र ऐसा सूचक नहीं है)। सी मानक कहता है कि यह अपरिभाषित व्यवहार एक शून्य सूचक को कम करने के लिए है। इसका मतलब है कि बिल्कुल कुछ भी हो सकता है: प्रोग्राम क्रैश हो सकता है, यह चुपचाप काम करना जारी रख सकता है, या यह आपकी हार्ड ड्राइव मिटा सकता है (हालांकि यह असंभव है)।
अधिकांश कार्यान्वयन में, आपको ऐसा करने का प्रयास करने पर "सेगमेंटेशन गलती" या "एक्सेस उल्लंघन" मिलेगा, जो लगभग हमेशा आपके प्रोग्राम को ऑपरेटिंग सिस्टम द्वारा समाप्त कर दिया जाएगा। यहाँ एक तरह से एक अशक्त सूचक dereferenced जा सकता है:
int *x = NULL; // x is a null pointer
int y = *x; // CRASH: dereference x, trying to read it
*x = 0; // CRASH: dereference x, trying to write it
और हाँ, एक अशक्त सूचक dereferencing काफी वास्तव में सी # में एक NullReferenceException
(या जावा में एक NullPointerException
) की तरह है, सिवाय इसके कि भाषा के मानक एक छोटे से अधिक है यहां सहायक सी # में, एक शून्य संदर्भ को संदर्भित करने के लिए अच्छी तरह से परिभाषित व्यवहार है: यह हमेशा NullReferenceException
फेंकता है। ऐसा कोई तरीका नहीं है कि आपका प्रोग्राम चुपचाप काम करना जारी रख सके या सी में अपनी हार्ड ड्राइव मिटा दें (जब तक कि भाषा रनटाइम में कोई बग न हो, लेकिन फिर भी यह अविश्वसनीय रूप से असंभव है)।
स्रोत
2010-10-24 16:17:23
ऐसा करने में ध्यान रखें, अपरिभाषित व्यवहार में परिणाम। आपको सी या सी ++ में अपवाद या कुछ भी नहीं मिलता है। – GManNickG
आप कुछ उदाहरण कोड डालना चाहते हैं। ऐसा लगता है कि लोग (मेरे साथ) जो आप पूछने की कोशिश कर रहे हैं वह नहीं मिलता है। –
कोड की कोई आवश्यकता नहीं है (कोई भी नहीं है) - यह एक वैचारिक समस्या है जो मैं कर रहा हूं, "dereferencing" की शब्दावली के आसपास अपना सिर पाने की कोशिश कर रहा हूं और मुझे इसकी देखभाल क्यों करनी चाहिए। – Ash