C/C++ में फंक्शन्स भी मेमोरी में संग्रहीत होते हैं और उनका एड्रेस लिया जा सकता है। फंक्शन नाम (बिना पैरेंथेसिस) उसका एड्रेस देता है।
उदाहरण
#include <stdio.h>
void my_function() {
printf("Hello World\n");
}
int main() {
// फंक्शन एड्रेस प्रिंट करें
printf("Address of my_function: %p\n", (void*)my_function);
printf("Address of main: %p\n", (void*)main);
// फंक्शन पॉइंटर के माध्यम से कॉल
void (*func_ptr)() = my_function;
func_ptr(); // Hello World
return 0;
}
आउटपुट
Address of my_function: 0x55a1b2c3d4e0 Address of main: 0x55a1b2c3d500
फंक्शन पॉइंटर्स
// घोषणा void (*ptr)(); // कोई आर्गुमेंट नहीं, void रिटर्न int (*cmp)(int, int); // दो int लेता है, int रिटर्न // असाइनमेंट ptr = my_function; cmp = my_comparison; // कॉल ptr(); int result = cmp(10, 20);
उपयोग के मामले
- कॉलबैक फंक्शन्स
- डिस्पैच टेबल्स / वर्चुअल फंक्शन टेबल्स
- प्लगइन आर्किटेक्चर
- सॉर्टिंग कम्पेरेटर्स (
qsort,bsearch) - स्टेट मशीन्स
महत्वपूर्ण नोट्स
&my_functionऔरmy_functionसमान हैं (फंक्शन-टू-पॉइंटर डिके)।%pके साथ(void*)कास्ट करें।- फंक्शन पॉइंटर्स के बीच तुलना (
==,!=) वैध है। - मेंबर फंक्शन पॉइंटर्स (C++) अलग सिंटैक्स और अधिक जटिल हैं।