क्या सी में किसी फ़ंक्शन के लिए फ़ंक्शन पॉइंटर को तर्क के रूप में पास करना संभव है?एक तर्क के रूप में फंक्शन पॉइंटर
यदि हां, तो मैं एक फ़ंक्शन पॉइंटर को तर्क के रूप में कैसे घोषित करता हूं और परिभाषित करता हूं?
क्या सी में किसी फ़ंक्शन के लिए फ़ंक्शन पॉइंटर को तर्क के रूप में पास करना संभव है?एक तर्क के रूप में फंक्शन पॉइंटर
यदि हां, तो मैं एक फ़ंक्शन पॉइंटर को तर्क के रूप में कैसे घोषित करता हूं और परिभाषित करता हूं?
निश्चित रूप से।
void f(void (*a)()) {
a();
}
void test() {
printf("hello world\n");
}
int main() {
f(&test);
return 0;
}
मैं दुनिया भर में मशहूर C faqs
Let पर रखने का सुझाव देते कहते हैं कि तुम समारोह
int func(int a, float b);
तो सूचक को यह तुलना में आप इस्तेमाल कर सकते हैं
int (*func_pointer)(int, float);
तो होगा यह
पसंद हैfunc_pointer = func;
(*func_pointer)(1, 1.0);
/*below also works*/
func_pointer(1, 1.0);
पूर्ण सूचक प्रकार हर बार जब आप इसकी आवश्यकता को निर्दिष्ट से बचने के लिए आप इसे typedef
coud
typedef int (*FUNC_PTR)(int, float);
और की तुलना में किसी भी अन्य प्रकार की तरह का उपयोग
void executor(FUNC_PTR func)
{
func(1, 1.0);
}
int silly_func(int a, float b)
{
//do some stuff
}
main()
{
FUNC_PTR ptr;
ptr = silly_func;
executor(ptr);
/* this should also wotk */
executor(silly_func)
}
मैं दुनिया भर में मशहूर C faqs पर रखने का सुझाव देते ।
चेक qsort()
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
कार्य करने के लिए अंतिम तर्क एक समारोह सूचक है। जब आप अपने प्रोग्राम में qsort()
पर कॉल करते हैं, तो उस पॉइंटर के उपयोग के माध्यम से निष्पादन "लाइब्रेरी में जाता है" और "अपने कोड में वापस कदम उठाएं"।
एक अच्छा उदाहरण:
#include <iostream>
using namespace std;
int sum(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a/b;
}
int mathOp(int (*OpType)(int, int), int a, int b)
{
return OpType(a, b);
}
int main()
{
cout << mathOp(sum, 10, 12) << ", " << mathOp(div, 10, 2) << endl;
return 0;
}
उत्पादन होता है: '22, 5 '
बदलें च (परीक्षण) के लिए कॉल; –
दोनों काम करेंगे। एम्परसेंड वैकल्पिक है। तो जब आप फंक्शन पॉइंटर को कॉल कर रहे हों तो पॉइंटर को डिफ्रेंस कर रहा है। –
सच है, कुछ भी बदलने की जरूरत नहीं है। इसके अलावा, पैरामीटर घोषणा में भी "सूचक" वाक्यविन्यास वैकल्पिक है। उपर्युक्त 'एफ' को 'शून्य एफ (शून्य ए()) के रूप में घोषित किया जा सकता था। – AnT