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

সি/সি++-এ ফাংশনের অ্যাড্রেস বের করা

সি/সি++-এ ফাংশনগুলোক মেমরিতে কোড সেগমেন্টে (Text Segment) সংরক্ষিত থাকে, তাই ভেরিয়েবলের মতোই তাদেরও মেমরি অ্যাড্রেস রয়েছে। ফাংশন নাম ব্যবহার করে (প্যারেনথেসিস ছাড়া) এর অ্যাড্রেস পাওয়া যায়।

উদাহরণ

#include <stdio.h>

void my_function() {
    printf("Hello World\n");
}

int main() {
    printf("The address of my_function is: %p\n", (void*)my_function);
    printf("The address of main is: %p\n", (void*)main);
    return 0;
}

আউটপুট (নমুনা)

The address of my_function is: 0000000000401530
The address of main is: 000000000040154B

ব্যাখ্যা

  • my_function (প্যারেনথেসিস ছাড়া) → ফাংশনের এন্ট্রি পয়েন্টের অ্যাড্রেস
  • &my_function — একই অর্থে কাজ করে (সি-এ অপশনাল, সি++-এ প্রিয়)
  • %p ফরম্যাট স্পেসিফায়ার দিয়ে প্রিন্ট করুন এবং (void*) কাস্ট করুন

ফাংশন পয়েন্টার হিসেবে ব্যবহার

void (*func_ptr)() = my_function; // অ্যাসাইন
func_ptr();                       // কল (সমতুল্য my_function())

ব্যবহার ক্ষেত্র

  • কলব্যাক (Callback) ফাংশন
  • ফাংশন টেবিল / জাম্প টেবিল (State machine, VM, ইন্টারপ্রেটার)
  • প্লাগইন সিস্টেম, ডাইনামিক লোডিং (dlsym)
  • সিগন্যাল হ্যান্ডলার রেজিস্ট্রেশন (signal(), sigaction())

দ্রষ্টব্য

  • ফাংশন পয়েন্টারের টাইপ সাইনেচার মিলতে হবে (রিটার্ন টাইপ, প্যারামিটার লিস্ট)
  • সি++-এ মেম্বার ফাংশন পয়েন্টার আলাদা টাইপ (void (Class::*)()) এবং ভিন্ন সিনট্যাক্স
  • ASLR (Address Space Layout Randomization) সক্রিয় থাকলে প্রতিটি রানে অ্যাড্রেস ভিন্ন হবে
  1. সি/সি++-এ ল্যাম্বডা ফাংশনের তাৎপর্য

  2. C/C++-তে ফাংশন: সম্পূর্ণ গাইড

  3. C/C++-তে putwchar() ফাংশন

  4. C/C++-তে system() ফাংশন: কম্যান্ড এক্সিকিউশন