মডিউল ১৫-২ঃ কল বাই ভেলু

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

#include<stdio.h>
void fun(int x)      // ফাংশন x কে রিসিভ করছে প্যারামিটার হিসেবে। 
{
    x = 100;         // x এর ভেলু চেঞ্জ করে ১০০ করে দেওয়া হচ্ছে।
}
int main()
{
    int x = 10;      // শুরুতে x এর মধ্যে ১০ রাখা হলো 
    fun(x);          // তারপর এই x টিকে ফাংশনের মধ্যে পাস করে দেওয়া হলো। 
    printf("%d\n",x); // x এর ভেলু প্রিন্ট করা হচ্ছে। 
}

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

#include<stdio.h>
void fun(int x)
{
    printf("fun er x er address: %p\n",&x);  // ফাংশনের ভিতর x এর এড্রেস প্রিন্ট করা হচ্ছে।
}
int main()
{
    int x = 10;
    fun(x);
    printf("main er x er address: %p\n",&x); // মেইন ফাংশনের ভিতর x এর এড্রেস প্রিন্ট করা হচ্ছে।
}

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

Last updated