void pointer in C in hindi
अब तक, हमने अध्ययन किया है कि सूचक को निर्दिष्ट पता उसी प्रकार का होना चाहिए जैसा कि pointer declaration में निर्दिष्ट है। उदाहरण के लिए, यदि हम int पॉइंटर की घोषणा करते हैं, तो यह int पॉइंटर float वेरिएबल या किसी अन्य प्रकार के वेरिएबल को point नहीं कर सकता है, अर्थात यह केवल int टाइप वेरिएबल को इंगित कर सकता है। void करने के लिए एक pointer का अर्थ है एक सामान्य pointer जो किसी भी डेटा प्रकार को point कर सकता है। हम किसी भी डेटा प्रकार के पते को void pointer को निर्दिष्ट कर सकते हैं, और एक void पॉइंटर को किसी भी explicit typecasting किए बिना किसी भी प्रकार के पॉइंटर को सौंपा जा सकता है।
Syntax of void pointer
- void *pointer name;
Declaration of the void pointer is given below:
- void *ptr;
उपरोक्त घोषणा में, void सूचक का प्रकार है, और ‘ptr’ pointer का नाम है।
Let us consider some examples:
int i=9; // integer variable initialization.
int *p; // integer pointer declaration.
float *fp; // floating pointer declaration.
void *ptr; // void pointer declaration.
p=fp; // incorrect.
fp=&i; // incorrect
ptr=p; // correct
ptr=fp; // correct
ptr=&i; // correct
Size of the void pointer in C in Hindi
C में void पॉइंटर का आकार character type के पॉइंटर के आकार के समान है। C perception के अनुसार, void के लिए एक pointer का प्रतिनिधित्व character type के pointer के समान है। आपके द्वारा उपयोग किए जा रहे प्लेटफॉर्म के आधार पर पॉइंटर का आकार अलग-अलग होगा।
आइए नीचे दिए गए उदाहरण को देखें:
- #include <stdio.h>
- int main()
- {
- void *ptr = NULL; //void pointer
- int *p = NULL;// integer pointer
- char *cp = NULL;//character pointer
- float *fp = NULL;//float pointer
- //size of void pointer
- printf(“size of void pointer = %d\n\n”,sizeof(ptr));
- //size of integer pointer
- printf(“size of integer pointer = %d\n\n”,sizeof(p));
- //size of character pointer
- printf(“size of character pointer = %d\n\n”,sizeof(cp));
- //size of float pointer
- printf(“size of float pointer = %d\n\n”,sizeof(fp));
- return 0;
- }
Output
Advantages of void pointer in Hindi
एक void pointer के फायदे निम्नलिखित हैं:
- malloc() और calloc() फ़ंक्शन void पॉइंटर लौटाते हैं, इसलिए इन फ़ंक्शन का उपयोग किसी भी डेटा प्रकार की मेमोरी को आवंटित करने के लिए किया जा सकता है।
- #include <stdio.h>
- #include<malloc.h>
- int main()
- {
- int a=90;
- int *x = (int*)malloc(sizeof(int)) ;
- x=&a;
- printf(“Value which is pointed by x pointer : %d”,*x);
- return 0;
- }
Output
- C में void पॉइंटर का उपयोग C में generic functions को लागू करने के लिए भी किया जा सकता है।
Void pointer से संबंधित कुछ महत्वपूर्ण points हैं:
- C में एक void point को संदर्भित करना
C में void पॉइंटर को सीधे dereference नहीं किया जा सकता है। आइए नीचे दिए गए उदाहरण देखें।
- #include <stdio.h>
- int main()
- {
- int a=90;
- void *ptr;
- ptr=&a;
- printf(“Value which is pointed by ptr pointer : %d”,*ptr);
- return 0;
- }
उपरोक्त कोड में, *ptr एक void pointer है जो integer variable ‘a’ की ओर point करता है। जैसा कि हम पहले से ही जानते हैं कि void पॉइंटर को dereference नहीं किया जा सकता है, इसलिए उपरोक्त कोड compile-time error देगा क्योंकि हम पॉइंटर ‘ptr’ द्वारा सीधे बताए गए वेरिएबल के मान को प्रिंट कर रहे हैं।
Output
अब, हम error को दूर करने के लिए उपरोक्त कोड को फिर से लिखते हैं।
- #include <stdio.h>
- int main()
- {
- int a=90;
- void *ptr;
- ptr=&a;
- printf(“Value which is pointed by ptr pointer : %d”,*(int*)ptr);
- return 0;
- }
उपरोक्त कोड में, हम नीचे दिए गए statement का उपयोग करके integer pointer को void pointer typecast करते हैं:
(Int *) ptr;
फिर, हम नीचे दिए गए स्टेटमेंट का उपयोग करके void पॉइंटर ‘ptr’ द्वारा बताए गए वेरिएबल के मान को प्रिंट करते हैं:
*(int*)ptr;
Output
- Arithmetic operation on void pointers
हम सी में void pointers पर arithmetic operations को सीधे लागू नहीं कर सकते। हमें उचित typecasting लागू करने की आवश्यकता है ताकि हम void pointers पर arithmetic operations कर सकें।
आइए नीचे दिए गए उदाहरण देखें:
- #include<stdio.h>
- int main()
- {
- float a[4]={6.1,2.3,7.8,9.0};
- void *ptr;
- ptr=a;
- for(int i=0;i<4;i++)
- {
- printf(“%f,”,*ptr);
- ptr=ptr+1; // Incorrect.
- }}
उपरोक्त कोड compile-time error दिखाता है कि ” invalid use of void expression” क्योंकि हम void pointer पर सीधे arithmetic operations को लागू नहीं कर सकते हैं, अर्थात, ptr=ptr+1
Error को दूर करने के लिए उपरोक्त कोड को फिर से लिखें।
- #include<stdio.h>
- int main()
- {
- float a[4]={6.1,2.3,7.8,9.0};
- void *ptr;
- ptr=a;
- for(int i=0;i<4;i++)
- {
- printf(“%f,”,*((float*)ptr+i));
- }}
उपरोक्त कोड सफलतापूर्वक चलता है क्योंकि हमने void pointer के लिए उचित casting लागू की है, अर्थात (float*)ptr और फिर हम अंकगणितीय ऑपरेशन, अर्थात, ((float*)ptr+i) को लागू करते हैं।
Output
Why we use void pointers?
हम इसकी reusability के कारण void pointers का उपयोग करते हैं। void pointers किसी भी प्रकार के ऑब्जेक्ट को स्टोर कर सकते हैं, और हम उचित typecasting के साथ indirection operator का उपयोग करके किसी भी प्रकार की object को पुनः प्राप्त कर सकते हैं।
आइए एक उदाहरण के माध्यम से समझते हैं।
- #include<stdio.h>
- int main()
- {
- int a=56; // initialization of a integer variable ‘a’.
- float b=4.5; // initialization of a float variable ‘b’.
- char c=‘k’; // initialization of a char variable ‘c’.
- void *ptr; // declaration of void pointer.
- // assigning the address of variable ‘a’.
- ptr=&a;
- printf(“value of ‘a’ is : %d”,*((int*)ptr));
- // assigning the address of variable ‘b’.
- ptr=&b;
- printf(“\nvalue of ‘b’ is : %f”,*((float*)ptr));
- // assigning the address of variable ‘c’.
- ptr=&c;
- printf(“\nvalue of ‘c’ is : %c”,*((char*)ptr));
- return 0;
- }
Output