C ++ पॉइंटर को शून्य करने के लिए (उदाहरण के साथ)

इस ट्यूटोरियल में, हम शून्य बिंदुओं के बारे में और उदाहरणों की मदद से उनका उपयोग कैसे करें, इसके बारे में जानेंगे।

इस ट्यूटोरियल के साथ आगे बढ़ने से पहले, C ++ पॉइंटर्स की जाँच करना सुनिश्चित करें।

C ++ में, हम एक डेटा टाइप के वैरिएबल के एड्रेस को दूसरे डेटा टाइप के पॉइंटर को असाइन नहीं कर सकते हैं। इस उदाहरण पर विचार करें:

 // pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;

यहां, त्रुटि हुई क्योंकि पता एक doubleप्रकार का चर है। हालाँकि, सूचक intप्रकार का है।

ऐसी स्थितियों में, हम C ++ में शून्य (शून्य पॉइंटर्स) को पॉइंटर का उपयोग कर सकते हैं । उदाहरण के लिए,

 // void pointer void *ptr; double d = 9.0; // valid code ptr = &d;

शून्य सूचक एक सामान्य सूचक है कि जब हम चर कि सूचक अंक के डेटा प्रकार पता नहीं है प्रयोग किया जाता है।

उदाहरण 1: C ++ शून्य सूचक

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )

आउटपुट

 0xffd117ac 0xffd117ac

यहां, पॉइंटर ptrका मान दिया जाता है &f

आउटपुट दिखाता है कि शून्य पॉइंटर ptr एक floatचर f का पता संग्रहीत करता है ।

जैसा voidकि एक खाली प्रकार है, शून्य बिंदुओं को निष्क्रिय नहीं किया जा सकता है।

 void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid

उदाहरण 2: शून्य सूचक सामग्री की छपाई

एक शून्य पॉइंटर की सामग्री को प्रिंट करने के लिए, हम static_castऑपरेटर का उपयोग करते हैं । यह पॉइंटर को void*टाइप से संबंधित डेटा टाइप के पते में कनवर्ट करता है जिससे पॉइंटर स्टोर हो रहा है:

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )

आउटपुट

 पॉइंटर की सामग्री 2.3 है

यह प्रोग्राम voidपॉइंटर ptr द्वारा बताए गए पते के मूल्य को प्रिंट करता है ।

चूँकि हम एक voidपॉइंटर को रोक नहीं सकते , हम उपयोग नहीं कर सकते *ptr

हालाँकि, यदि हम void*पॉइंटर टाइप को टाइप में बदलते हैं , तो हम पॉइंटर float*द्वारा बताए गए मान का उपयोग कर सकते हैं void

इस उदाहरण में, हमने static_castऑपरेटर के डेटा प्रकार को पॉइंटर से void*करने के लिए उपयोग किया है float*

सी-स्टाइल कास्टिंग

हम मूल्य को प्रिंट करने के लिए सी-स्टाइल कास्टिंग का भी उपयोग कर सकते हैं।

 // valid cout << *((float*)ptr);

हालांकि, static_castसी-स्टाइल कास्टिंग के लिए पसंद किया जाता है।

नोट: शून्य पॉइंटर्स का उपयोग वेरिएबल के पते को स्टोर करने के लिए constया volatileक्वालीफायर के साथ नहीं किया जा सकता है ।

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

दिलचस्प लेख...