মডিউল ১৫-৫ঃ ফাংশন এবং এরে

এখন আমরা দেখব কিভাবে একটি ফাংশনে এরে পাস করতে হয়।

নরমালি আমরা একটি ভেরিয়েবল যখন ফাংশনে পাস করতে চাই তখন শুধু তার নাম দিয়ে পাস করলেই হয়ে যায় কিন্তু এরে শুধু নাম দিয়ে পাস করলে হয় না।

#include<stdio.h>
void func(int *a)          // একটি পয়েন্টার দিয়ে এরে রিসিভ করা হচ্ছে
{
    int sz = sizeof(a)/sizeof(int);     // সাইজ বের করা হচ্ছে। সেইম মেইন ফাংশনের মতো করে।
    printf("Size in func = %d\n",sz);   // ফাংশনের ভিতর এরে সাইজ বের করা হচ্ছে।
}
int main()
{
    int n;
    scanf("%d",&n);    // এরে সাইজ ইনপুট নেওয়া হচ্ছে। 
    int a[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);     // এরে এলিমেন্ট ইনপুট নেওয়া হচ্ছে। 
    }
    int sz = sizeof(a)/sizeof(int);  
    printf("Size in main function = %d\n",sz);   // এরে সাইজ প্রিন্ট করা হচ্ছে। 
    func(a);    // ফাংশনকে কল করে এরে পাস করে দেওয়া হচ্ছে। 
}

কোডটি রান করে এরে ইনপুট দিয়ে দেখতে পাব মেইন ফাংশনে সাইজ ঠিকঠাক আছে কিন্তু ফাংশনে এরের সাইজ ১ প্রিন্ট হচ্ছে। এরে ইনপুট যাই দেওয়া হোক না কেন ফাংশনে এরের সাইজ ১ প্রিন্ট হবে। এর কারন মেইন ফাংশন যেখানে এরে ইনপুট নেওয়া হয়েছে তা এরের সাইজ ট্র্যাক রাখে কিন্তু ফাংশনে পাস করার পর সেটি আর এরে সাইজ ট্র্যাক রাখতে পারে না। তাই ফাংশনে এরে পাস করতে হলে আমাদের সাইজ ও পাস করে দিতে হয়।

এই কোডটি রান করলে আমরা দেখব সব ঠিকঠাক ভাবে প্রিন্ট হয়েছে। তাই ফাংশনে এরে পাস করতে হলে আমাদের সাইজও আলাদাভাবে পাস করে দিতে হয়। এক্ষেত্রে ফাংশনের প্যারামিটারে আমরা int a[] ( এরে হিসেবে ) অথবা int *a ( পয়েন্টার হিসেবে ) দুইভাবেই নিতে পারি।

Last updated