मूल अंतर
NULL पॉइंटर एक मान (value) है, जबकि Void पॉइंटर एक प्रकार (type) है।
NULL पॉइंटर (Null Pointer)
- यह दर्शाता है कि पॉइंटर किसी भी मेमोरी पते को संदर्भित नहीं कर रहा है।
- जब किसी पॉइंटर को कोई पता असाइन नहीं किया जाता, तो उसे NULL से आरंभ करना सुरक्षित अभ्यास है।
- हर पॉइंटर प्रकार (int*, char*, float* आदि) का अपना NULL मान होता है।
सिंटैक्स और उदाहरण
<डेटा_प्रकार> *<पॉइंटर_नाम> = NULL;
// उदाहरण
int *ptr1 = NULL;
char *ptr2 = NULL; // '\0' गलत है, NULL सही है
NULL पॉइंटर का प्रोग्राम
#include <stdio.h>
int main() {
int *p = NULL; // NULL पॉइंटर
printf("पॉइंटर का मान: %p\n", (void*)p); // आउटपुट: 0x0 या (nil)
return 0;
}
आउटपुट: पॉइंटर का मान: 0x0 (या कंपाइलर के अनुसार (nil))
Void पॉइंटर (Void Pointer)
- इसे जेनेरिक पॉइंटर (Generic Pointer) भी कहते हैं।
- इसका कोई विशिष्ट डेटा प्रकार नहीं होता (
void*)। - यह किसी भी डेटा प्रकार के पते को संग्रहीत कर सकता है।
- इसे डीरेफरेंस (dereference) करने से पहले उचित प्रकार में कास्ट (cast) करना पड़ता है।
सिंटैक्स और उदाहरण
void *ptr; // Void पॉइंटर घोषणा
int a = 10;
char c = 'X';
ptr = &a; // अब ptr इंटीजर पॉइंटर की तरह व्यवहार करता है
ptr = &c; // अब ptr कैरेक्टर पॉइंटर की तरह व्यवहार करता है
Void पॉइंटर का प्रोग्राम
#include <stdio.h>
int main() {
int a = 10;
void *ptr = &a;
// डीरेफरेंस करने के लिए (int*) में कास्ट करना आवश्यक
printf("मान: %d\n", *(int*)ptr); // आउटपुट: 10
return 0;
}
तुलना तालिका
| विशेषता | NULL पॉइंटर | Void पॉइंटर |
|---|---|---|
| प्रकृति | मान (Value) | प्रकार (Type) |
| उद्देश्य | अमान्य/अनारंभिक पॉइंटर दर्शाना | किसी भी प्रकार का पता रखना |
| डीरेफरेंसिंग | संभव नहीं (क्रैश होगा) | कास्ट करने के बाद संभव |
| उपयोग | सुरक्षा जांच, प्रारंभिकरण | जेनेरिक फंक्शन, मेमोरी आवंटन |