ফাংশন পয়েন্টার কী?
ফাংশন পয়েন্টার হলো একটি পয়েন্টার ভেরিয়েবল যা কোনো ফাংশনের এন্ট্রি পয়েন্ট (বেস এড্রেস) ধারণ করে। এর মাধ্যমে ফাংশনকে ইন্ডায়রেক্টলি কল করা যায়।
ঘোষণা (Declaration)
return_type (*ptr_name)(parameter_types);
উদাহরণ: int (*p)(int, int); — দুইটি int প্যারামিটার নেয় এবং int রিটার্ন করে এমন ফাংশনের পয়েন্টার।
ইনিশিয়ালাইজেশন
p = function_name; // অথবা &function_name
কল করা
(*p)(args); // অথবা সরাসরি p(args);
উদাহরণ ১: সিম্পল ফাংশন কল
#include <stdio.h>
void display() {
printf("Hello from function!\n");
}
int main() {
void (*p)(); // প্যারামিটার নেই, রিটার্ন নেই
p = display;
p(); // কল
return 0;
}
আউটপুট
Hello from function!
উদাহরণ ২: পয়েন্টার আর্গুমেন্ট হিসেবে ফাংশন পাস
#include <stdio.h>
void increment(int *p) {
(*p)++;
}
int main() {
int a = 20;
int *ptr = &a;
increment(ptr); // ফাংশন পয়েন্টার নয়, সাধারণ পয়েন্টার পাস
printf("Value = %d\n", *ptr); // 21
// ফাংশন পয়েন্টার ব্যবহার:
void (*func_ptr)(int*) = increment;
func_ptr(ptr); // আবার কল
printf("Value = %d\n", *ptr); // 22
return 0;
}
আউটপুট
Value = 21 Value = 22
ফাংশন পয়েন্টারের ব্যবহার ক্ষেত্র
- কলব্যাক ফাংশন (Callback): qsort(), bsearch() লাইব্রেরি ফাংশনগুলো কম্প্যারিজন ফাংশন পয়েন্টার নেয়।
- স্টেট মেশিন / ডিসপ্যাচ টেবিল: মেনু-চালিত প্রোগ্রামে।
- প্লাগইন আর্কিটেকচার: রানটাইমে ফাংশন লোড/কল করা।
qsort() উদাহরণ (কলব্যাক)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int n = 5;
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
আউটপুট
1 2 5 8 9