2
1

আমি সুবিন ভাইয়ের সি প্রোগরামিং বই পরছি। সেখানে এই বিষয়টি বুঝি নি । কেউ আমাকে কিছু উদাহারণ দিয়ে বুঝাতে পারবেন?

asked 06 Dec '16, 07:22

zarif%20ahmed's gravatar image

zarif ahmed
193115


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

কোড :

int a[5];

a[0] = 10;
a[1] = 20;

printf("Address: %d\n", a); // print a's starting address; 
printf("Address: %d\n", a+1); // address of a[1];

printf("Value: %d\n", *a); // print value in a[0];

যেহেতু কোন অ্যারের নাম সেই অ্যারের শুরু অ্যাড্রেস hold করে তাই আমরা যদি func(a); পাস করি তবে সেটা int a[5]; এর শুরুর অ্যাড্রেস পাস হবে । তাই আমরা যদি func(a) এর মধ্যে আমাদের int a[5] অ্যারের কোন মান পরিবর্তন করি তবে তার মান main() ফাংশনেও পরিবর্তন হবে ।

কিন্ত int n, float n, char c, double d এই ধরনের ভেরিয়েবলের ক্ষেত্রে কপি পাস হয় ।

কোড :

void swap(int a, int b)
{
    int tmp;

    tmp = a;
    a = b;
    b = tmp;
}

আপনি যদি ২ টি সংখ্যা swap করার জন্য উপরে মত করে ফাংশন লিখেন এবং সেটা main থেকে কল করেন তবে দেখবেন আপনার সংখ্যা swap হয় নি । কারন আপনি main এর মধ্যে swap(a, b); কল করেন তখন এটা a, b এর কপি তৈরি করে এবং সেটা পাঠায়া দেয় এবং swap(a, b) এর মধ্যে a, b যে কপি পাঠালাম সেই কপির swap হয় কিন্তু main এর মধ্যে যে a, b আছে সেটার কোন পরিবর্তন হবে না ।

আপনি যদি main এর মধ্যেও a, b swap করতে চান তবে আপনাকে main থেকে a, b এর অ্যাড্রেস পাঠাতে হবে । এই ভাবে swap(&a, &b);

ধন্যবাদ :)

permanent link

answered 06 Dec '16, 19:02

menon's gravatar image

menon
4.7k742

1

tnx ভাই । ধন্যবাদ

(07 Dec '16, 02:20) zarif ahmed

happy coding :)

(07 Dec '16, 13:22) menon
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×33

question asked: 06 Dec '16, 07:22

question was seen: 1,016 times

last updated: 07 Dec '16, 13:22