সি প্রোগ্রামিং ইউনিয়ন - C Programming Union
সি প্রোগ্রামিং ইউনিয়ন
সি প্রোগ্রামিং এ ইউনিয়ন সম্পূর্নরূপে স্ট্রাকচার এর মতই। স্ট্রাকচারের ন্যায় ইউনিয়নও ডিরাইভ(derived) ডেটা টাইপ।
সি প্রোগ্রামিং এ ইউনিয়ন(Union) ডিফাইন করা খুবই সহজ এবং হুবহু স্ট্রাকচারের মতই। struct কীওয়ার্ডের পরিবর্তে শুধুমাত্র union কীওয়ার্ড ব্যবহার করতে হয়।
union car
{
char name[50];
int price;
};
ইউনিয়ন ভ্যারিয়েবল কিভাবে তৈরি করতে হয়?
স্ট্রাকচার ভ্যারিয়েবল যে পদ্ধতিতে তৈরি করা হয় ঠিক একই পদ্ধতিতে ইউনিয়ন ভ্যারিয়েবলও তৈরি করা হয়।
union car
{
char name[50];
int price;
} car1, car2, *car3;
অথবা
union car
{
char name[50];
int price;
};
int main()
{
union car car1, car2, *car3;
return 0;
}
উভয় ক্ষেত্রেই union car
ডেটা টাইপের car1 ও car2 ইউনিয়ন ভ্যারিয়েবল এবং car3 ইউনিয়ন পয়েন্টার ভ্যারিয়েবল তৈরি হয়েছে।
ইউনিয়নের মেম্বারকে এক্সেস করা
স্ট্রাকচারের মেম্বারকে যে পদ্ধতিতে এক্সেস করা হয় ঠিক একই পদ্ধতিতে ইউনিয়ন এর মেম্বারকেও এক্সেস করা হয়।
উপরের উদাহরণে আপনি যদি ইউনিয়ন ভ্যারিয়েবল car এর মেম্বার price কে এক্সেস করতে চান তাহলে নিচের পদ্ধতি অনুসরণ করুনঃ
car1.price
একইভাবে আপনি যদি ইউনিয়ন পয়েন্টার ভ্যারিয়েবল- car3 এর মেম্বার price কে এক্সেস করতে চান তাহলে নিচের পদ্ধতি অনুসরণ করুনঃ
(*car3).price অথবা; *car3->price
ইউনিয়ন এবং স্ট্রাকচারের মধ্যে পার্থক্য
ইউনিয়ন এবং স্ট্রাকচার অনেক ক্ষেত্রে একই রকম হওয়া সত্ত্বেও এদের মধ্যে পার্থক্য বুঝা খুবই গুরুত্বপূর্ণ।
নিচের উদাহরণের সাহায্যে চলুন ইউনিয়ন এবং স্ট্রাকচারের প্রাথমিক পার্থক্য বুঝার চেষ্টা করিঃ
#include <stdio.h>
union unionJob
{
//ইউনিয়ন ডেফিনেশন
char name[32];
float salary;
int workerNo;
} uJob;
struct structJob
{
//স্ট্রাকচার ডেফিনিশন
char name[32];
float salary;
int workerNo;
} sJob;
int main()
{
printf("size of union = %d", sizeof(uJob));
printf("\nsize of structure = %d", sizeof(sJob));
return 0;
}
আউটপুট
size of union = 32 size of structure = 40
ইউনিয়নের তুলনায় স্ট্রাকচারের জন্য বেশী মেমোরি বরাদ্দ রাখতে হয়
উপরের উদাহরণে ইউনিয়ন এবং স্ট্রাকচারের মধ্যে মেমোরি বরাদ্দ বিষয়ক পার্থক্য দেখানো হয়েছে।
স্ট্রাকচার ভ্যারিয়েবলের ক্ষেত্রে সকল মেম্বারের যোগফলের সমান মেমোরি বরাদ্দ রাখতে হয়।
অপরপক্ষে ইউনিয়ন ভ্যারিয়েবলের ক্ষেত্রে ইউনিয়নের সর্বোচ্চ এলিমেন্টের সমান মেমোরির প্রয়োজন হয়। ।
একই সঙ্গে শুধুমাত্র একটি ইউনিয়ন মেম্বারকে এক্সেস করা যায়
স্টারকচারঃ একই সঙ্গে ইহার সকল মেম্বারকে এক্সেস করা যায়।
ইউনিয়নঃ একই সঙ্গে ইহার একটিমাত্র মেম্বারকে এক্সেস করা যায় এবং অন্যান্য সকল মেম্বার গার্বেজ(garbage) ভ্যালু ধারণ করে।
#include <stdio.h>
union job
{
char name[32];
float salary;
int workerNo;
} job1;
int main()
{
printf("Enter name:\n");
scanf("%s", &job1.name);
printf("Enter salary: \n");
scanf("%f", &job1.salary);
printf("Displaying\nName :%s\n", job1.name);
printf("Salary: %.1f", job1.salary);
return 0;
}
আউটপুট
Enter name Tamim Enter salary 12345.25 Displaying Name: Trm$y Salary: 12345.2
বিঃদ্রঃ নামের জন্য আপনি বিভিন্ন গার্বেজ ভ্যালু পেতে পারেন।
উপরের প্রোগ্রামে job1.name
এর মধ্যে প্রথমে Tamim স্টোর করা হয় এবং job1 এর অন্যান্য সকল মেম্বার যেমন salary, workerNo গার্বেজ ভ্যালু ধারণ করবে।
কিন্তু ইউজার যখন salary এর ভ্যালু প্রবেশ করায় তখন job1.salary
এর মধ্যে 1234.23 স্টোর হয় এবং অন্যান্য মেম্বার যেমন-name, workerNo গার্বেজ ভ্যালু ধারণ করবে।
এইভাবে আউটপুটে salary সঠিকভাবে প্রিন্ট হবে কিন্তু name কিছু র্যান্ডম(random) স্ট্রিং ডিসপ্লে করে।
ফাংশনের মধ্য দিয়ে ইউনিয়নকে অতিক্রম করানো
সি প্রোগ্রামিং এ স্ট্রাকচারকে যে পদ্ধতিতে ফাংশনের মধ্য দিয়ে অতিক্রম করানো হয়, একই পদ্ধতিতে ইউনিয়নকেও অতিক্রম করানো হয়।
আরোও জানতে ভিজিট করুনঃ সি প্রোগ্রামিং এ স্ট্রাকচারকে কিভাবে অতিক্রম করানো হয়?