What is C++ Void Pointer
सी ++ शून्य सूचक - C++ Void Pointer
What is C++ Void Pointer
एक शून्य सूचक एक सामान्य-उद्देश्य सूचक है जो किसी भी डेटा प्रकार का पता रख सकता है, लेकिन यह किसी भी डेटा प्रकार से संबद्ध नहीं है।
शून्य सूचक का सिंटेक्स- Syntax of void pointer
void *ptr;
C ++ में, हम किसी भिन्न डेटा प्रकार के चर के लिए एक चर का पता निर्दिष्ट नहीं कर सकते हैं। निम्नलिखित उदाहरण पर विचार करें:
int *ptr; // integer pointer declaration
float a=10.2; // floating variable initialization
ptr= &a; // This statement throws an error.
ऊपर दिए गए उदाहरण में, हम इंटीजर टाइप का एक पॉइंटर घोषित करते हैं, यानी, ptr और एक फ्लोट वेरिएबल, यानी, 'a'। घोषणा के बाद, हम 'a' वेरिएबल के एड्रेस को 'ptr' में स्टोर करने की कोशिश करते हैं, लेकिन C++ में यह संभव नहीं है क्योंकि वेरिएबल विभिन्न डेटा प्रकारों के एड्रेस को होल्ड नहीं कर सकता है।
आइए एक सरल उदाहरण के माध्यम से समझते हैं।
#include <iostream.h>
using namespace std;
int main()
{
int *ptr;
float f=10.3;
ptr = &f; // error
std::cout << "The value of *ptr is : " <<*ptr<< std::endl;
return 0;
}
उपरोक्त प्रोग्राम में, हम पूर्णांक प्रकार के सूचक और फ्लोट प्रकार के चर घोषित करते हैं। एक पूर्णांक सूचक चर फ़्लोट चर को इंगित नहीं कर सकता है, लेकिन यह केवल एक पूर्णांक चर को इंगित कर सकता है।
Output:-
C++ ने C++ void पॉइंटर का उपयोग करके उपरोक्त समस्या को दूर किया है क्योंकि एक void पॉइंटर किसी भी डेटा प्रकार के पते को होल्ड कर सकता है।
आइए शून्य सूचक का एक सरल उदाहरण देखें।
#include <iostream>
using namespace std;
int main()
{
void *ptr; // void pointer declaration
int a=9; // integer variable initialization
ptr=&a; // storing the address of 'a' variable in a void pointer variable.
std::cout << &a << std::endl;
std::cout << ptr << std::endl;
return 0;
}
उपरोक्त कार्यक्रम में, हम एक शून्य सूचक चर और एक पूर्णांक चर घोषित करते हैं जहाँ शून्य सूचक में एक पूर्णांक चर का पता होता है।
Output:-
सी और सी ++ में शून्य सूचक के बीच अंतर
सी में, हम बिना किसी टाइपकास्टिंग के किसी अन्य पॉइंटर प्रकार को शून्य पॉइंटर असाइन कर सकते हैं, जबकि सी ++ में, जब हम शून्य पॉइंटर प्रकार को किसी अन्य पॉइंटर प्रकार को असाइन करते हैं तो हमें टाइपकास्ट करने की आवश्यकता होती है।
आइए एक सरल उदाहरण के माध्यम से समझते हैं।
In C,
#include <stdio.h>
int main()
{
void *ptr; // void pointer declaration
int *ptr1; // integer pointer declaration
int a =90; // integer variable initialization
ptr=&a; // storing the address of 'a' in ptr
ptr1=ptr; // assigning void pointer to integer pointer type.
printf("The value of *ptr1 : %d",*ptr1);
return 0;
}
उपरोक्त प्रोग्राम में, हम क्रमशः शून्य और पूर्णांक प्रकार के दो पॉइंटर्स 'ptr' और 'ptr1' घोषित करते हैं। हम पूर्णांक प्रकार चर, यानी 'ए' भी घोषित करते हैं। घोषणा के बाद, हम पॉइंटर 'ptr' को 'a' वेरिएबल का पता असाइन करते हैं। फिर, हम शून्य सूचक को पूर्णांक सूचक को असाइन करते हैं, अर्थात, ptr1 बिना किसी टाइपकास्टिंग के क्योंकि C में, हमें किसी अन्य प्रकार के सूचक को शून्य सूचक निर्दिष्ट करते समय टाइपकास्ट करने की आवश्यकता नहीं होती है।
Output:-
In C++,
#include <iostream>
using namespace std;
int main()
{
void *ptr; // void pointer declaration
int *ptr1; // integer pointer declaration
int data=10; // integer variable initialization
ptr=&data; // storing the address of data variable in void pointer variable
ptr1=(int *)ptr; // assigning void pointer to integer pointer
std::cout << "The value of *ptr1 is : " <<*ptr1<< std::endl;
return 0;
}
उपरोक्त कार्यक्रम में, हम क्रमशः शून्य और int प्रकार के दो सूचक चर घोषित करते हैं। हम एक अन्य पूर्णांक प्रकार का चर भी बनाते हैं, अर्थात, 'डेटा'। डिक्लेरेशन के बाद हम वेरिएबल 'डेटा' के एड्रेस को एक वॉयड पॉइंटर वेरिएबल यानी ptr में स्टोर करते हैं। अब, हम शून्य सूचक को पूर्णांक सूचक को असाइन करना चाहते हैं, ऐसा करने के लिए, हमें कास्ट ऑपरेटर, यानी, (int *) को शून्य सूचक चर पर लागू करने की आवश्यकता है। यह कास्ट ऑपरेटर कंपाइलर को बताता है कि किस प्रकार का मान शून्य सूचक धारण कर रहा है। Casting करने के लिए हमें (char *) या (int *) जैसे ब्रैकेट में डेटा टाइप और * टाइप करना होता है।