इस ट्यूटोरियल में, हम शून्य बिंदुओं के बारे में और उदाहरणों की मदद से उनका उपयोग कैसे करें, इसके बारे में जानेंगे।
इस ट्यूटोरियल के साथ आगे बढ़ने से पहले, 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;