Function Pointer in C in Hindi
जैसा कि हम जानते हैं कि हम किसी भी डेटा प्रकार के pointer बना सकते हैं जैसे कि int, char, float, हम एक फ़ंक्शन की ओर point करते हुए एक पॉइंटर भी बना सकते हैं। किसी फ़ंक्शन का कोड हमेशा मेमोरी में रहता है, जिसका अर्थ है कि फ़ंक्शन का कुछ address है। हम फ़ंक्शन पॉइंटर का उपयोग करके मेमोरी का address प्राप्त कर सकते हैं।
आइए एक साधारण उदाहरण देखें।
Let’s see a simple example.
- #include <stdio.h>
- int main()
- {
- printf(“Address of main() function is %p”,main);
- return 0;
- }
उपरोक्त कोड main() फ़ंक्शन के पते को प्रिंट करता है।
Output
उपरोक्त आउटपुट में, हम मानते हैं कि main() फ़ंक्शन का कुछ पता है। इसलिए, हम निष्कर्ष निकालते हैं कि प्रत्येक फ़ंक्शन का कुछ पता है।
Declaration of a function pointer in hindi
अब तक, हमने देखा है कि फ़ंक्शन के पते हैं, इसलिए हम ऐसे पॉइंटर्स बना सकते हैं जिनमें ये पते हो सकते हैं, और इसलिए उन्हें point कर सकते हैं।
Syntax of function pointer
- return type (*ptr_name)(type1, type2…);
For example:
- int (*ip) (int);
उपरोक्त घोषणा में, *ip एक pointer है जो एक फ़ंक्शन को point करता है जो एक int value देता है और एक integer मान को एक argument के रूप में स्वीकार करता है।
- float (*fp) (float);
उपरोक्त घोषणा में, *fp एक पॉइंटर होता है जो एक फंक्शन की ओर point करता है जो एक float वैल्यू देता है और एक float वैल्यू को एक argument के रूप में स्वीकार करता है।
हम यह देख सकते हैं कि फ़ंक्शन की घोषणा फ़ंक्शन पॉइंटर की घोषणा के समान है सिवाय इसके कि पॉइंटर ‘*’ से पहले है । तो, उपरोक्त घोषणा में, fp को एक सूचक के बजाय एक फ़ंक्शन के रूप में घोषित किया गया है।
अब तक, हमने सीखा है कि फ़ंक्शन पॉइंटर को कैसे घोषित किया जाए। हमारा अगला चरण फ़ंक्शन पॉइंटर को फ़ंक्शन का पता असाइन करना है।
- float (*fp) (int , int); // Declaration of a function pointer.
- float func( int , int ); // Declaration of function.
- fp = func; // Assigning address of func to the fp pointer.
उपरोक्त घोषणा में, ‘fp’ पॉइंटर में ‘func’ फ़ंक्शन का पता होता है।
Calling a function through a function pointer in hindi
हम पहले से ही जानते हैं कि किसी फ़ंक्शन को सामान्य तरीके से कैसे कॉल किया जाए। अब, हम देखेंगे कि फ़ंक्शन पॉइंटर का उपयोग करके फ़ंक्शन को कैसे कॉल किया जाए।
मान लीजिए कि हम नीचे दिए गए अनुसार एक function घोषित करते हैं:
- float func(int , int); // Declaration of a function.
एक सामान्य तरीके का उपयोग करके उपरोक्त फ़ंक्शन को कॉल करना नीचे दिया गया है:
- result = func(a , b); // Calling a function using usual ways.
फ़ंक्शन पॉइंटर का उपयोग करके फ़ंक्शन को कॉल करना नीचे दिया गया है:
- result = (*fp)( a , b); // Calling a function using function pointer.
या
- result = fp(a , b); // Calling a function using function pointer, and indirection operator can be removed.
किसी फ़ंक्शन को उसके नाम या फ़ंक्शन पॉइंटर द्वारा कॉल करने का प्रभाव समान है। यदि हम फ़ंक्शन पॉइंटर का उपयोग कर रहे हैं, तो हम indirection ऑपरेटर को छोड़ सकते हैं जैसा कि हमने दूसरे मामले में किया था। फिर भी, हम indirection ऑपरेटर का उपयोग करते हैं क्योंकि यह उपयोगकर्ता को स्पष्ट करता है कि हम एक फ़ंक्शन पॉइंटर का उपयोग कर रहे हैं।
आइए फ़ंक्शन पॉइंटर को एक उदाहरण के माध्यम से समझते हैं।
- #include <stdio.h>
- int add(int,int);
- int main()
- {
- int a,b;
- int (*ip)(int,int);
- int result;
- printf(“Enter the values of a and b : “);
- scanf(“%d %d”,&a,&b);
- ip=add;
- result=(*ip)(a,b);
- printf(“Value after addition is : %d”,result);
- return 0;
- }
- int add(int a,int b)
- {
- int c=a+b;
- return c;
- }
Output
Passing a function’s address as an argument to other function
हम फ़ंक्शन के पते को अन्य फ़ंक्शन के argument के रूप में पास कर सकते हैं उसी तरह हम फ़ंक्शन को अन्य argument भेजते हैं।
आइए एक उदाहरण के माध्यम से समझते हैं।
- include <stdio.h>
- void func1(void (*ptr)());
- void func2();
- int main()
- {
- func1(func2);
- return 0;
- }
- void func1(void (*ptr)())
- {
- printf(“Function1 is called”);
- (*ptr)();
- }
- void func2()
- {
- printf(“\nFunction2 is called”);
- }
उपरोक्त कोड में, हमने दो फ़ंक्शन बनाए हैं, अर्थात, func1() और func2(). Func1() फ़ंक्शन में argument के रूप में फ़ंक्शन पॉइंटर होता है। main() method में, func1() method को कहा जाता है जिसमें हम func2 के पते को पास करते हैं। जब func1() फ़ंक्शन को बुलाया जाता है, तो ‘ptr’ में ‘func2’ का पता होता है। Func1() फ़ंक्शन के अंदर, हम func2() फ़ंक्शन को पॉइंटर को ‘ptr’ कहकर कॉल करते हैं क्योंकि इसमें func2 का पता होता है।
Output
Array of Function Pointers in hindi
फ़ंक्शन पॉइंटर्स का उपयोग उन applications में किया जाता है जहां हम पहले से नहीं जानते हैं कि किस फ़ंक्शन को बुलाया जाएगा। फ़ंक्शन पॉइंटर्स की एक array में, सरणी अलग-अलग फ़ंक्शन के पते लेती है, और इंडेक्स नंबर के आधार पर उपयुक्त फ़ंक्शन को बुलाया जाएगा।
आइए एक उदाहरण के माध्यम से समझते हैं।
#include <stdio.h>
float add(float,int);
float sub(float,int);
float mul(float,int);
float div(float,int);
int main()
{
float x; // variable declaration.
int y;
float (*fp[4]) (float,int); // function pointer declaration.
fp[0]=add; // assigning addresses to the elements of an array of a function pointer.
fp[1]=sub;
fp[2]=mul;
fp[3]=div;
printf("Enter the values of x and y :");
scanf("%f %d",&x,&y);
float r=(*fp[0]) (x,y); // Calling add() function.
printf("\nSum of two values is : %f",r);
r=(*fp[1]) (x,y); // Calling sub() function.
printf("\nDifference of two values is : %f",r);
r=(*fp[2]) (x,y); // Calliung sub() function.
printf("\nMultiplication of two values is : %f",r);
r=(*fp[3]) (x,y); // Calling div() function.
printf("\nDivision of two values is : %f",r);
return 0;
}
float add(float x,int y)
{
float a=x+y;
return a;
}
float sub(float x,int y)
{
float a=x-y;
return a;
}
float mul(float x,int y)
{
float a=x*y;
return a;
}
float div(float x,int y)
{
float a=x/y;
return a;
}
उपरोक्त कोड में, हमने फ़ंक्शन पॉइंटर्स की एक array बनाई है जिसमें चार फ़ंक्शन के पते हैं। फ़ंक्शन पॉइंटर्स की एक सरणी में फ़ंक्शन के पते संग्रहीत करने के बाद, हम फ़ंक्शन पॉइंटर का उपयोग करके फ़ंक्शन को कॉल करते हैं।
Output