हम एक समारोह है कि पूर्णांक पर काम करता है पूर्णांक सरणियों पर काम करने के बदल सकता है की सी
void apply(int *arr, size_t len, int (*func)(int))
{
for(size_t i = 0; i < len; i++)
arr[i] = func(arr[i]);
}
के लिए इस तरह एक map
की तरह समारोह करते हैं,। हम एक समान संस्करण भी कर सकते हैं:
void apply_enumerated(int *arr, size_t len, int (*func)(size_t, int))
{
for(size_t i = 0; i < len; i++)
arr[i] = func(i, arr[i]);
}
यह वही काम करता है, लेकिन हमारे कार्य को यह जानने की अनुमति देता है कि यह किस तत्व पर है।हम इस इस्तेमाल कर सकते हैं, उदाहरण के लिए:
int cube(int i) { return i * i * i }
void print_array(int *array, size_t len, char *sep)
{
if(sep == NULL) sep = ", ";
printf("%d", *array);
for(size_t i = 1; i < len; i++) printf("%s%d", sep, array[i])
}
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
int main(void)
{
int array[5] = { 1, 2, 3, 4, 5 };
print_array(array, ARRAY_SIZE(array), NULL);
apply(array, ARRAY_SIZE(array), cube);
print_array(array, ARRAY_SIZE(array), NULL);
return 0;
}
कि कोड प्रिंट होगा:
1, 2, 3, 4, 5
1, 8, 27, 64, 125
हमारे गणन उदाहरण के लिए:
int mult(size_t i, int j) { return i * j }
// print_array and ARRAY_SIZE as before
int main(void)
{
int array[5] = { 1, 2, 3, 4, 5 };
print_array(array, ARRAY_SIZE(array), NULL);
apply_enumerated(array, ARRAY_SIZE(array), mult);
print_array(array, ARRAY_SIZE(array), NULL);
return 0;
}
यह प्रिंट:
1, 2, 3, 4, 5
0, 2, 6, 12, 20
के रूप में एक और वास्तविक दुनिया उदाहरण, एक सेंट रिंग लाइब्रेरी में एक ऐसा फ़ंक्शन हो सकता है जो स्ट्रिंग में सभी वर्णों के लिए एकल वर्णों पर चलने वाले फ़ंक्शन को लागू करता हो। ऐसे कार्यों का एक उदाहरण मानक पुस्तकालय toupper()
और tolower()
ctype.h
में फ़ंक्शन हैं - हम फ़ंक्शन को आसानी से बनाने के लिए इस string_apply()
फ़ंक्शन का उपयोग कर सकते हैं।
मानक लाइब्रेरी फ़ंक्शन 'qsort()' को देखें और देखें कि क्या यह आपकी सहायता करता है। –
http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work/840669#840669 –
इन्हें ओएस के हुड के तहत भी उपयोग किया जाता है .. जैसे मैंने एक ओएस बनाया फ़ंक्शन पॉइंटर्स का उपयोग करके ड्राइवर ढांचे .. वे बहुत आसान हैं क्योंकि यह 'वर्चुअल/अमूर्त' विधियों की तरह है, सिवाय इसके कि आपको इसे नियंत्रित करना है और इसे प्रबंधित करना है .. – Earlz