Skill

স্ট্রাকচার এবং ইউনিয়ন

সি প্রোগ্রামিং উদাহরণ (C Examples) - Computer Science

438

সি প্রোগ্রামিং ভাষায় স্ট্রাকচার এবং ইউনিয়ন দুটি গুরুত্বপূর্ণ ডেটা টাইপ, যা বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করতে সাহায্য করে। তবে এগুলোর ব্যবহারে কিছু মৌলিক পার্থক্য রয়েছে।

১. স্ট্রাকচার (Structure)

স্ট্রাকচার একটি কাস্টম ডেটা টাইপ, যা একাধিক ভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। স্ট্রাকচার ব্যবহার করে ডেটাকে আরও সংগঠিত ও সহজে প্রবেশযোগ্য করা যায়।

স্ট্রাকচারের ঘোষণা এবং ব্যবহার

স্ট্রাকচার ঘোষণা করতে struct কীওয়ার্ড ব্যবহার করা হয়। স্ট্রাকচারের প্রতিটি সদস্য আলাদা আলাদা মেমোরি বরাদ্দ পায়।

উদাহরণ:

#include <stdio.h>

// স্ট্রাকচার ডিফাইন করা
struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    struct Person person1; // স্ট্রাকচার ভ্যারিয়েবল ডিক্লেয়ার করা
    
    // মান অ্যাসাইন করা
    person1.age = 25;
    person1.salary = 55000.50;
    strcpy(person1.name, "Alice");

    // আউটপুট করা
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Salary: %.2f\n", person1.salary);

    return 0;
}

আউটপুট:

Name: Alice
Age: 25
Salary: 55000.50

স্ট্রাকচারের বৈশিষ্ট্য

  1. মেমোরি বরাদ্দ: স্ট্রাকচারের প্রতিটি সদস্যের জন্য আলাদা মেমোরি বরাদ্দ হয়।
  2. ডেটা অ্যাক্সেস: ডট (.) অপারেটরের মাধ্যমে স্ট্রাকচারের সদস্যদের অ্যাক্সেস করা হয়।
  3. ভিন্ন ধরনের ডেটা সংরক্ষণ: স্ট্রাকচারের মাধ্যমে বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করা যায়।

২. ইউনিয়ন (Union)

ইউনিয়ন ডেটা টাইপটি স্ট্রাকচারের মতোই, তবে এখানে প্রতিটি সদস্য একই মেমোরি স্থান শেয়ার করে। অর্থাৎ, একাধিক ডেটা একত্রে সংরক্ষণ করা সম্ভব হলেও একই সময়ে শুধুমাত্র একটি সদস্যের ডেটা রাখা যায়।

ইউনিয়ন ঘোষণা এবং ব্যবহার

ইউনিয়ন ঘোষণা করতে union কীওয়ার্ড ব্যবহার করা হয়। ইউনিয়নের সবচেয়ে বড় সদস্যের জন্য যতটুকু মেমোরি প্রয়োজন, পুরো ইউনিয়ন সেই মেমোরি দখল করে।

উদাহরণ:

#include <stdio.h>
#include <string.h>

// ইউনিয়ন ডিফাইন করা
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;

    // মান অ্যাসাইন করা এবং আউটপুট করা
    data.i = 10;
    printf("data.i: %d\n", data.i);

    data.f = 220.5;
    printf("data.f: %.2f\n", data.f);

    strcpy(data.str, "Hello");
    printf("data.str: %s\n", data.str);

    return 0;
}

আউটপুট:

data.i: 10
data.f: 220.50
data.str: Hello

বিঃদ্রঃ: একবারে কেবলমাত্র একটি সদস্যের মান সঠিকভাবে রাখা সম্ভব, কারণ সব সদস্য একই মেমোরি স্পেস শেয়ার করে। শেষ মানটি সঠিকভাবে প্রদর্শিত হয়।

ইউনিয়নের বৈশিষ্ট্য

  1. মেমোরি শেয়ারিং: ইউনিয়নের সব সদস্য একই মেমোরি স্থান শেয়ার করে, যা মেমোরি অপটিমাইজেশনে সহায়ক।
  2. একক সদস্য কার্যকর: একসঙ্গে একাধিক সদস্যের ডেটা রাখা সম্ভব নয়; সর্বশেষ সংরক্ষিত মানই সঠিক থাকে।
  3. ডেটা অ্যাক্সেস: ডট (.) অপারেটর ব্যবহার করে ইউনিয়নের সদস্যদের অ্যাক্সেস করা হয়।

স্ট্রাকচার এবং ইউনিয়নের পার্থক্য

বৈশিষ্ট্যস্ট্রাকচারইউনিয়ন
মেমোরি বরাদ্দপ্রতিটি সদস্য আলাদা মেমোরি পায়সব সদস্য একই মেমোরি শেয়ার করে
একাধিক ডেটা রাখাএকসঙ্গে একাধিক সদস্যের ডেটা রাখা যায়একসঙ্গে কেবল একটি সদস্যের ডেটা রাখা সম্ভব
আকারস্ট্রাকচারের আকার সব সদস্যের মেমোরির যোগফলইউনিয়নের আকার সবচেয়ে বড় সদস্যের আকারের সমান
ব্যবহারবিভিন্ন ডেটা একসাথে সংরক্ষণ করতেমেমোরি সাশ্রয়ের জন্য একটি ডেটা রাখতে

স্ট্রাকচার এবং ইউনিয়নের ব্যবহারিক উদাহরণ

উদাহরণ: মেমোরি সাশ্রয়ের জন্য ইউনিয়ন ব্যবহার

যখন কোনো ভ্যারিয়েবলে বিভিন্ন ধরনের মান রাখার প্রয়োজন হয় কিন্তু একই সময়ে কেবলমাত্র একটি মান রাখা হবে, তখন ইউনিয়ন ব্যবহার করা হয়।

#include <stdio.h>

union Measurement {
    int weight;      // গ্রামে ওজন
    float height;    // মিটারে উচ্চতা
};

int main() {
    union Measurement measure;

    measure.weight = 70; // ওজন সেট করা
    printf("Weight: %d grams\n", measure.weight);

    measure.height = 1.75; // উচ্চতা সেট করা
    printf("Height: %.2f meters\n", measure.height);

    return 0;
}

আউটপুট:

Weight: 70 grams
Height: 1.75 meters

বিঃদ্রঃ: measure.height সেট করার পর measure.weight এর মান পরিবর্তিত হয়ে যায়, কারণ একই মেমোরি স্পেস ব্যবহার করা হচ্ছে।

সংক্ষেপে

  • স্ট্রাকচার: একাধিক ধরনের ডেটা একসঙ্গে সংরক্ষণে ব্যবহৃত হয়, এবং প্রতিটি সদস্য আলাদা মেমোরি বরাদ্দ পায়।
  • ইউনিয়ন: একাধিক ধরনের ডেটা একত্রে সংরক্ষণে ব্যবহৃত হয়, তবে একই সময়ে কেবল একটি সদস্য কার্যকর থাকে এবং সব সদস্য একই মেমোরি স্পেস শেয়ার করে।
Content added By

স্ট্রাকচার সি প্রোগ্রামিং ভাষায় একটি কাস্টম ডেটা টাইপ, যা বিভিন্ন ধরনের ডেটা একসঙ্গে সংরক্ষণ করতে সাহায্য করে। স্ট্রাকচার ব্যবহার করে একাধিক ভিন্ন ধরনের ভ্যারিয়েবল (যেমন int, float, char ইত্যাদি) একত্রে রাখা যায়। এটি ডেটা ম্যানেজমেন্টকে সহজ করে এবং একাধিক বৈশিষ্ট্যবিশিষ্ট ডেটা গঠন তৈরি করতে সাহায্য করে।

স্ট্রাকচার কীভাবে কাজ করে?

স্ট্রাকচার একটি কন্টেইনার হিসেবে কাজ করে যেখানে বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করা যায়। প্রতিটি ডেটাকে মেম্বার বা সদস্য বলা হয় এবং প্রতিটি সদস্যের জন্য আলাদা আলাদা মেমোরি বরাদ্দ হয়।

স্ট্রাকচার ডিক্লেয়ারেশন

স্ট্রাকচার ঘোষণা করার জন্য struct কীওয়ার্ড ব্যবহার করা হয়।

গঠন:

struct StructureName {
    data_type member1;
    data_type member2;
    ...
};

উদাহরণ: একটি ব্যক্তির তথ্য সংরক্ষণে স্ট্রাকচার

#include <stdio.h>
#include <string.h>

// স্ট্রাকচার ডিক্লেয়ারেশন
struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    struct Person person1;  // স্ট্রাকচার ভ্যারিয়েবল ডিক্লেয়ার করা

    // স্ট্রাকচারের সদস্যদের মান অ্যাসাইন করা
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.salary = 75000.50;

    // আউটপুট করা
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Salary: %.2f\n", person1.salary);

    return 0;
}

আউটপুট:

Name: Alice
Age: 30
Salary: 75000.50

স্ট্রাকচারের ব্যবহার

১. ডেটা ম্যানেজমেন্ট: বিভিন্ন ধরনের ডেটা একসাথে রাখতে সাহায্য করে, যেমন নাম, বয়স, ঠিকানা, মোবাইল নম্বর ইত্যাদি। ২. ডেটাবেজ তৈরি করা: ডেটাবেজ অ্যাপ্লিকেশন বা ব্যবস্থাপনার জন্য স্ট্রাকচার ব্যবহৃত হয়। ৩. কমপ্লেক্স ডেটা স্ট্রাকচার তৈরি: লিংকড লিস্ট, স্ট্যাক, এবং কিউ-এর মতো ডেটা স্ট্রাকচার তৈরি করতে সাহায্য করে। ৪. কোড পাঠযোগ্যতা: কোড সংক্ষিপ্ত ও পরিষ্কার রাখতে কার্যকর।

স্ট্রাকচার ব্যবহার করে একাধিক ডেটা সংরক্ষণ

স্ট্রাকচারের মাধ্যমে আমরা একাধিক ভ্যারিয়েবল একই গঠন ব্যবহার করে সংরক্ষণ করতে পারি।

উদাহরণ: একাধিক ব্যক্তির তথ্য সংরক্ষণ

#include <stdio.h>
#include <string.h>

struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    struct Person person1, person2;

    // person1 এর তথ্য
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.salary = 50000.50;

    // person2 এর তথ্য
    strcpy(person2.name, "Bob");
    person2.age = 25;
    person2.salary = 45000.75;

    // আউটপুট
    printf("Person 1: %s, Age: %d, Salary: %.2f\n", person1.name, person1.age, person1.salary);
    printf("Person 2: %s, Age: %d, Salary: %.2f\n", person2.name, person2.age, person2.salary);

    return 0;
}

আউটপুট:

Person 1: Alice, Age: 30, Salary: 50000.50
Person 2: Bob, Age: 25, Salary: 45000.75

স্ট্রাকচারের অ্যারে ব্যবহার

স্ট্রাকচারের অ্যারে ব্যবহার করে সহজেই একাধিক ডেটা সংরক্ষণ ও পরিচালনা করা যায়।

উদাহরণ: স্ট্রাকচারের অ্যারে ব্যবহার করে একাধিক ছাত্রের তথ্য সংরক্ষণ

#include <stdio.h>
#include <string.h>

struct Student {
    char name[50];
    int roll;
    float marks;
};

int main() {
    struct Student students[3]; // ৩ জন ছাত্রের জন্য স্ট্রাকচারের অ্যারে

    // প্রতিটি ছাত্রের তথ্য প্রবেশ
    for (int i = 0; i < 3; i++) {
        printf("Enter name, roll, and marks for student %d:\n", i + 1);
        scanf("%s", students[i].name);
        scanf("%d", &students[i].roll);
        scanf("%f", &students[i].marks);
    }

    // তথ্য আউটপুট করা
    printf("\nStudent Information:\n");
    for (int i = 0; i < 3; i++) {
        printf("Name: %s, Roll: %d, Marks: %.2f\n", students[i].name, students[i].roll, students[i].marks);
    }

    return 0;
}

উদাহরণিক ইনপুট:

Enter name, roll, and marks for student 1:
Alice 101 85.5
Enter name, roll, and marks for student 2:
Bob 102 90.0
Enter name, roll, and marks for student 3:
Charlie 103 92.5

আউটপুট:

Student Information:
Name: Alice, Roll: 101, Marks: 85.50
Name: Bob, Roll: 102, Marks: 90.00
Name: Charlie, Roll: 103, Marks: 92.50

স্ট্রাকচারের সংক্ষেপে গঠন এবং ব্যবহারের সুবিধা

  1. মেম্বার ভ্যারিয়েবল: একাধিক ভ্যারিয়েবল একত্রিত করে একটি কাঠামোতে সংরক্ষণ করা।
  2. কাস্টম ডেটা টাইপ: বিভিন্ন ডেটার জন্য একটি কাস্টম ডেটা টাইপ তৈরি করা যায়।
  3. সহজ ডেটা ম্যানেজমেন্ট: বড় ডেটাসেট সহজেই পরিচালনা ও সংগঠিত করা যায়।
  4. কোড পাঠযোগ্যতা: প্রোগ্রামিংয়ে সহজতর এবং পরিচ্ছন্ন কোডিং সম্ভব।

সংক্ষেপে: স্ট্রাকচার প্রোগ্রামিংয়ে একাধিক ভিন্ন ধরনের ডেটাকে একত্রিত করে একটি কাস্টম ডেটা টাইপ তৈরির সুবিধা দেয়, যা ডেটা ম্যানেজমেন্টকে আরও সহজ এবং কার্যকর করে।

Content added By

স্ট্রাকচার মেম্বার এবং মেম্বার অ্যাক্সেস অপারেটর (ডট অপারেটর .) সি প্রোগ্রামিং ভাষায় স্ট্রাকচারের গুরুত্বপূর্ণ বৈশিষ্ট্য। স্ট্রাকচারে বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করা যায় এবং মেম্বার অ্যাক্সেস অপারেটর (.) ব্যবহার করে স্ট্রাকচারের প্রতিটি সদস্যের মান অ্যাক্সেস করা যায়।

স্ট্রাকচার মেম্বার

স্ট্রাকচারের প্রতিটি ভ্যারিয়েবল বা উপাদানকে মেম্বার বলা হয়। প্রতিটি মেম্বার ভিন্ন ভিন্ন ডেটা টাইপের হতে পারে এবং স্ট্রাকচারের মধ্যে ডিক্লেয়ার করা হয়। উদাহরণস্বরূপ, একটি Person স্ট্রাকচারে name, age, এবং salary মেম্বার থাকতে পারে।

উদাহরণ: স্ট্রাকচার মেম্বার ডিক্লেয়ারেশন

struct Person {
    char name[50];
    int age;
    float salary;
};

এখানে Person স্ট্রাকচারের তিনটি মেম্বার রয়েছে:

  • name: char টাইপের একটি অ্যারে, যা নাম সংরক্ষণ করে।
  • age: int টাইপের মেম্বার, যা বয়স সংরক্ষণ করে।
  • salary: float টাইপের মেম্বার, যা বেতন সংরক্ষণ করে।

মেম্বার অ্যাক্সেস অপারেটর (.)

ডট অপারেটর (.) ব্যবহার করে স্ট্রাকচারের প্রতিটি মেম্বার অ্যাক্সেস করা যায়। স্ট্রাকচারের ভ্যারিয়েবল দিয়ে . অপারেটর ব্যবহার করে নির্দিষ্ট মেম্বার নির্বাচন করা হয়।

সাধারণ গঠন:

structure_variable.member_name;

উদাহরণ: মেম্বার অ্যাক্সেস অপারেটর (.) ব্যবহার

ধরা যাক, আমরা একটি Person স্ট্রাকচার তৈরি করব এবং ডট অপারেটরের মাধ্যমে এর প্রতিটি মেম্বারে প্রবেশ করব।

#include <stdio.h>
#include <string.h>

// স্ট্রাকচার ডিক্লেয়ারেশন
struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    struct Person person1;  // স্ট্রাকচার ভ্যারিয়েবল ডিক্লেয়ার করা
    
    // স্ট্রাকচারের মেম্বারগুলিতে মান অ্যাসাইন করা
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.salary = 55000.50;

    // মেম্বার অ্যাক্সেস অপারেটর ব্যবহার করে মেম্বার প্রিন্ট করা
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Salary: %.2f\n", person1.salary);

    return 0;
}

আউটপুট:

Name: Alice
Age: 30
Salary: 55000.50

ব্যাখ্যা

  • এখানে person1 হলো Person স্ট্রাকচারের একটি ভ্যারিয়েবল।
  • person1.name, person1.age, এবং person1.salary ব্যবহার করে person1 এর প্রতিটি মেম্বার অ্যাক্সেস করা হয়েছে।
  • . অপারেটরের মাধ্যমে প্রতিটি মেম্বারে প্রবেশ করে তাদের মান অ্যাসাইন করা হয়েছে এবং আউটপুটে দেখানো হয়েছে।

স্ট্রাকচারের মেম্বার অ্যাক্সেসের আরও উদাহরণ

উদাহরণ: একাধিক স্ট্রাকচার ভ্যারিয়েবল এবং মেম্বার অ্যাক্সেস

#include <stdio.h>
#include <string.h>

struct Student {
    int roll;
    char name[50];
    float marks;
};

int main() {
    struct Student student1, student2;

    // student1 এর মেম্বারগুলিতে মান অ্যাসাইন করা
    student1.roll = 1;
    strcpy(student1.name, "John");
    student1.marks = 85.5;

    // student2 এর মেম্বারগুলিতে মান অ্যাসাইন করা
    student2.roll = 2;
    strcpy(student2.name, "Jane");
    student2.marks = 90.0;

    // আউটপুটে student1 এর তথ্য প্রদর্শন
    printf("Student 1 Roll: %d\n", student1.roll);
    printf("Student 1 Name: %s\n", student1.name);
    printf("Student 1 Marks: %.2f\n", student1.marks);

    // আউটপুটে student2 এর তথ্য প্রদর্শন
    printf("Student 2 Roll: %d\n", student2.roll);
    printf("Student 2 Name: %s\n", student2.name);
    printf("Student 2 Marks: %.2f\n", student2.marks);

    return 0;
}

আউটপুট:

Student 1 Roll: 1
Student 1 Name: John
Student 1 Marks: 85.50
Student 2 Roll: 2
Student 2 Name: Jane
Student 2 Marks: 90.00

সংক্ষেপে

  • স্ট্রাকচার মেম্বার: স্ট্রাকচারের মধ্যে থাকা বিভিন্ন ভ্যারিয়েবল বা উপাদান, যেমন নাম, বয়স, মার্কস ইত্যাদি।
  • মেম্বার অ্যাক্সেস অপারেটর (.): ডট অপারেটর ব্যবহার করে স্ট্রাকচারের ভ্যারিয়েবলের প্রতিটি মেম্বার অ্যাক্সেস করা হয়।

এই বৈশিষ্ট্যের মাধ্যমে প্রোগ্রামে বিভিন্ন ধরনের ডেটা একসঙ্গে ম্যানেজ ও ম্যানিপুলেট করা সহজ হয় এবং এটি প্রোগ্রামিংকে আরও সুশৃঙ্খল করে তোলে।

Content added By

ইউনিয়ন হলো সি প্রোগ্রামিং ভাষায় একটি ডেটা টাইপ, যা স্ট্রাকচারের মতো বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। তবে স্ট্রাকচারের সাথে এর মূল পার্থক্য হলো, ইউনিয়নে সব মেম্বার একই মেমোরি লোকেশন শেয়ার করে। ফলে একসাথে একাধিক মেম্বারকে কার্যকরভাবে সংরক্ষণ করা সম্ভব হয় না। ইউনিয়নের সাহায্যে বিভিন্ন ধরনের ডেটা সংরক্ষণ করা সম্ভব হলেও একই সময়ে কেবলমাত্র একটি মেম্বার কার্যকরভাবে ডেটা সংরক্ষণ করতে পারে।

ইউনিয়নের ব্যবহার

১. মেমোরি অপটিমাইজেশন: যখন একটি ডেটা টাইপে একসাথে একাধিক ভিন্ন ধরনের মান রাখা প্রয়োজন হয় না, তখন ইউনিয়ন ব্যবহার করে মেমোরি অপটিমাইজ করা যায়। ২. ভিন্ন ধরনের ইনপুট ব্যবস্থাপনা: কোনো ফাংশন বা ডেটা স্ট্রাকচার যেখানে বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করতে হয়, সেখানে ইউনিয়ন ব্যবহার কার্যকর। ৩. মাল্টিপল রেসপন্স ফরম্যাট: যখন কোনো ভেরিয়েবলে বিভিন্ন ফরম্যাটের রেসপন্স থাকতে পারে, সেখানে ইউনিয়ন ব্যবহার করা যেতে পারে।

উদাহরণ: ইউনিয়ন ব্যবহার করে মেমোরি সাশ্রয় করা

ধরা যাক, আমরা একটি Measurement ইউনিয়ন তৈরি করছি, যেখানে ওজন বা উচ্চতা সংরক্ষণ করতে হবে। তবে একসঙ্গে দুটিই সংরক্ষণের প্রয়োজন নেই।

#include <stdio.h>

union Measurement {
    int weight;     // ওজন সংরক্ষণ
    float height;   // উচ্চতা সংরক্ষণ
};

int main() {
    union Measurement m;

    m.weight = 70;
    printf("Weight: %d kg\n", m.weight);

    m.height = 1.75;
    printf("Height: %.2f meters\n", m.height);

    return 0;
}

আউটপুট:

Weight: 70 kg
Height: 1.75 meters

বিঃদ্রঃ: এখানে m.weight সেট করার পর যখন m.height সেট করা হয়, তখন আগের m.weight এর মান মুছে যায় কারণ একই মেমোরি লোকেশন শেয়ার করা হচ্ছে।

ইউনিয়নের বৈশিষ্ট্য এবং সীমাবদ্ধতা

বৈশিষ্ট্যব্যাখ্যা
মেমোরি শেয়ারিংইউনিয়নের সব মেম্বার একই মেমোরি শেয়ার করে, যা মেমোরি অপটিমাইজেশনে সহায়ক
একক মেম্বার কার্যকরএকই সময়ে কেবলমাত্র একটি মেম্বার কার্যকর থাকে
ডেটা সংরক্ষণ সীমাবদ্ধযেহেতু সব মেম্বার একই মেমোরি শেয়ার করে, তাই সব ডেটা একসাথে সংরক্ষণ সম্ভব নয়

স্ট্রাকচার বনাম ইউনিয়ন

বৈশিষ্ট্যস্ট্রাকচারইউনিয়ন
মেমোরি বরাদ্দপ্রতিটি মেম্বার আলাদা মেমোরি পায়সব মেম্বার একই মেমোরি শেয়ার করে
একাধিক মেম্বার কার্যকরএকসঙ্গে একাধিক মেম্বার কার্যকর থাকেএকসঙ্গে একটি মেম্বার কার্যকর থাকে
আকারস্ট্রাকচারের আকার সব মেম্বারের যোগফলসবচেয়ে বড় মেম্বারের আকারের সমান

সংক্ষেপে

  • ইউনিয়ন হলো এমন ডেটা টাইপ যা একই মেমোরি স্পেস শেয়ার করে।
  • এটি মেমোরি অপটিমাইজেশনে সহায়ক এবং একসঙ্গে একাধিক ডেটা রাখার প্রয়োজন না হলে ব্যবহার করা হয়।
  • ইউনিয়নের প্রধান সীমাবদ্ধতা হল, একসঙ্গে একাধিক মেম্বারের মান রাখা সম্ভব নয়।
Content added By

সি প্রোগ্রামিং ভাষায় স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহার করে স্ট্রাকচারের ডেটা আরও কার্যকরভাবে অ্যাক্সেস এবং ম্যানিপুলেট করা যায়। পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারগুলো সরাসরি মেমোরি অ্যাড্রেস ব্যবহার করে অ্যাক্সেস করা হয়, যা প্রোগ্রামের কার্যকারিতা বৃদ্ধি করে।

স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহারের উদ্দেশ্য

১. মেমোরি অপটিমাইজেশন: পয়েন্টার ব্যবহার করে স্ট্রাকচারের মেম্বারগুলোর মেমোরি অ্যাড্রেস ধরে রাখা সম্ভব হয়, যা মেমোরি অপটিমাইজেশনে সহায়ক। ২. ফাংশনে স্ট্রাকচার পাস করা: স্ট্রাকচারের পুরো কপি পাঠানোর পরিবর্তে শুধুমাত্র পয়েন্টার পাস করে মেমোরি সাশ্রয় করা যায়। ৩. ডাইনামিক মেমোরি ম্যানেজমেন্ট: পয়েন্টার ব্যবহার করে ডাইনামিক্যালি স্ট্রাকচারের মেমোরি বরাদ্দ ও মুক্ত করা সম্ভব।

উদাহরণ: স্ট্রাকচার এবং পয়েন্টার ব্যবহার

১. পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারে প্রবেশ

স্ট্রাকচারের মেম্বারে পয়েন্টার ব্যবহার করে প্রবেশ করতে -> (অ্যারো অপারেটর) ব্যবহার করা হয়।

গঠন:

pointer_to_structure->member_name;

উদাহরণ: স্ট্রাকচারের মেম্বারে পয়েন্টার দিয়ে প্রবেশ

#include <stdio.h>
#include <string.h>

// স্ট্রাকচার ডিক্লেয়ারেশন
struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    struct Person person1;
    struct Person *ptr;  // স্ট্রাকচারের পয়েন্টার ডিক্লেয়ার করা

    ptr = &person1;  // স্ট্রাকচারের ঠিকানা পয়েন্টারে সংরক্ষণ

    // পয়েন্টার ব্যবহার করে মান অ্যাসাইন করা
    strcpy(ptr->name, "Alice");
    ptr->age = 30;
    ptr->salary = 50000.50;

    // পয়েন্টার ব্যবহার করে মান প্রিন্ট করা
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);
    printf("Salary: %.2f\n", ptr->salary);

    return 0;
}

আউটপুট:

Name: Alice
Age: 30
Salary: 50000.50

বিবরণ:

  • এখানে ptr একটি পয়েন্টার, যা person1 স্ট্রাকচারের ঠিকানা ধারণ করে।
  • -> অপারেটর ব্যবহার করে name, age, এবং salary মেম্বারে প্রবেশ করে তাদের মান অ্যাসাইন ও প্রিন্ট করা হয়েছে।

২. ফাংশনে স্ট্রাকচারের পয়েন্টার পাস করা

ফাংশনে স্ট্রাকচারের পুরো কপি পাঠানোর পরিবর্তে পয়েন্টার পাস করে কার্যকারিতা বৃদ্ধি করা যায় এবং মেমোরি সাশ্রয় করা যায়।

উদাহরণ: ফাংশনে স্ট্রাকচারের পয়েন্টার পাস করা

#include <stdio.h>
#include <string.h>

// স্ট্রাকচার ডিক্লেয়ারেশন
struct Person {
    char name[50];
    int age;
    float salary;
};

// ফাংশন ডিক্লেয়ারেশন
void display(struct Person *p) {
    printf("Name: %s\n", p->name);
    printf("Age: %d\n", p->age);
    printf("Salary: %.2f\n", p->salary);
}

int main() {
    struct Person person1;

    // স্ট্রাকচারের মেম্বারগুলিতে মান অ্যাসাইন করা
    strcpy(person1.name, "Bob");
    person1.age = 28;
    person1.salary = 45000.75;

    // ফাংশনে স্ট্রাকচারের পয়েন্টার পাস করা
    display(&person1);

    return 0;
}

আউটপুট:

Name: Bob
Age: 28
Salary: 45000.75

বিবরণ:

  • display ফাংশনে struct Person এর পয়েন্টার পাস করা হয়েছে, যা p দ্বারা নির্দেশিত।
  • p->name, p->age, এবং p->salary ব্যবহার করে মেম্বারের মান প্রিন্ট করা হয়েছে।

৩. ডাইনামিক মেমোরি ম্যানেজমেন্টে স্ট্রাকচারের পয়েন্টার ব্যবহার

malloc ফাংশন ব্যবহার করে ডাইনামিক্যালি স্ট্রাকচারের জন্য মেমোরি বরাদ্দ করা যায় এবং free ফাংশন দিয়ে মেমোরি মুক্ত করা যায়।

উদাহরণ: ডাইনামিক মেমোরি বরাদ্দ এবং মুক্ত করা

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    // ডাইনামিক্যালি মেমোরি বরাদ্দ করা
    struct Person *ptr = (struct Person*) malloc(sizeof(struct Person));
    
    // মেমোরি বরাদ্দ সফল হয়েছে কিনা তা যাচাই করা
    if (ptr == NULL) {
        printf("Memory allocation failed!");
        return 1;
    }

    // মেম্বারগুলিতে মান অ্যাসাইন করা
    strcpy(ptr->name, "Charlie");
    ptr->age = 35;
    ptr->salary = 60000.00;

    // মান প্রিন্ট করা
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);
    printf("Salary: %.2f\n", ptr->salary);

    // মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

আউটপুট:

Name: Charlie
Age: 35
Salary: 60000.00

বিবরণ:

  • malloc ফাংশনের মাধ্যমে ডাইনামিক্যালি মেমোরি বরাদ্দ করা হয়েছে।
  • free ফাংশনের মাধ্যমে সেই মেমোরি মুক্ত করা হয়েছে।

সংক্ষেপে

  • স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহার করে মেমোরি অপটিমাইজেশন, মেম্বারে দ্রুত প্রবেশ এবং ডাইনামিক মেমোরি ম্যানেজমেন্ট করা যায়।
  • -> অপারেটর ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারগুলোতে প্রবেশ করা হয়।
Content added By
Promotion

Are you sure to start over?

Loading...