সি পাইথন প্রোগ্রামিং জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল জেকুয়েরি এইচটিএমএল সিএসএস বুটস্ট্রাপ এঙ্গুলার জেএস
লগইন
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি প্রোগ্রামিং ইউনিয়ন - C Programming Union


এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ ইউনিয়ন সম্মন্ধে জানবেন। আরোও নির্দিষ্ট করে বললেঃ ইউনিয়ন তৈরি করা, এক্সেস করা এবং ইউনিয়ন(Union)স্ট্রাকচার(structure) এর মধ্যে পার্থক্য তৈরি করতে শিখবেন।

সি প্রোগ্রামিং ইউনিয়ন

সি প্রোগ্রামিং এ ইউনিয়ন সম্পূর্নরূপে স্ট্রাকচার এর মতই। স্ট্রাকচারের ন্যায় ইউনিয়নও ডিরাইভ(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 ডেটা টাইপের car1car2 ইউনিয়ন ভ্যারিয়েবল এবং 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) স্ট্রিং ডিসপ্লে করে।


ফাংশনের মধ্য দিয়ে ইউনিয়নকে অতিক্রম করানো

সি প্রোগ্রামিং এ স্ট্রাকচারকে যে পদ্ধতিতে ফাংশনের মধ্য দিয়ে অতিক্রম করানো হয়, একই পদ্ধতিতে ইউনিয়নকেও অতিক্রম করানো হয়।

আরোও জানতে ভিজিট করুনঃ সি প্রোগ্রামিং এ স্ট্রাকচারকে কিভাবে অতিক্রম করানো হয়?