কম্পিউটার টিউটোরিয়াল

সি প্রোগ্রাম দিয়ে ফাংশন পয়েন্টার (Pointer to Function) বোঝা

ফাংশন পয়েন্টার কী?

ফাংশন পয়েন্টার হলো একটি পয়েন্টার ভেরিয়েবল যা কোনো ফাংশনের এন্ট্রি পয়েন্ট (বেস এড্রেস) ধারণ করে। এর মাধ্যমে ফাংশনকে ইন্ডায়রেক্টলি কল করা যায়।

ঘোষণা (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
  1. নন-রিকার্সিভ ফাংশন ব্যবহার করে GCD বের করার সি প্রোগ্রাম

  2. রিকার্সিভ ফাংশন ব্যবহার করে GCD বের করার সি প্রোগ্রাম

  3. সি++ প্রোগ্রাম দিয়ে অন্য প্রোগ্রাম লঞ্চ করা

  4. C-এ ফাংশন পয়েন্টার ঘোষণা করার পদ্ধতি