C++ এ স্ট্রাকচার এবং পয়েন্টার একসাথে ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বারে সহজে অ্যাক্সেস করা যায়। স্ট্রাকচারের অবজেক্টের ঠিকানা ধারণ করতে পয়েন্টার ব্যবহার করা যেতে পারে, এবং সেই ঠিকানা ব্যবহার করে স্ট্রাকচারের সদস্যদের অ্যাক্সেস করা যায়।
স্ট্রাকচারের পয়েন্টার ঘোষণা
স্ট্রাকচারের পয়েন্টার ঘোষণা করার সময় struct কিওয়ার্ডের সাথে পয়েন্টার চিহ্ন * ব্যবহার করা হয়। উদাহরণস্বরূপ:
struct Person {
string name;
int age;
};
Person *ptr; // Person স্ট্রাকচারের একটি পয়েন্টার
স্ট্রাকচারের পয়েন্টার ব্যবহার
স্ট্রাকচারের পয়েন্টার ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বার অ্যাক্সেস করার জন্য -> (arrow) অপারেটর ব্যবহার করা হয়।
উদাহরণ: স্ট্রাকচারের পয়েন্টার ব্যবহার
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
};
int main() {
Person person1 = {"Alice", 25}; // একটি স্ট্রাকচার অবজেক্ট তৈরি করা
Person *ptr = &person1; // person1 এর ঠিকানা ptr এ রাখা হলো
// পয়েন্টার ব্যবহার করে স্ট্রাকচারের মেম্বার অ্যাক্সেস করা
cout << "Name: " << ptr->name << endl; // Output: Name: Alice
cout << "Age: " << ptr->age << endl; // Output: Age: 25
// পয়েন্টার ব্যবহার করে মান পরিবর্তন করা
ptr->age = 26;
cout << "Updated Age: " << person1.age << endl; // Output: Updated Age: 26
return 0;
}
বর্ণনা:
- এখানে
person1নামের একটিPersonস্ট্রাকচারের অবজেক্ট তৈরি করা হয়েছে, এবংptrনামের একটি পয়েন্টারperson1এর ঠিকানা ধরে রেখেছে। ptr->nameএবংptr->ageব্যবহার করেnameএবংageমেম্বার অ্যাক্সেস করা হয়েছে।- পয়েন্টারের মাধ্যমে
ageমেম্বারের মান পরিবর্তন করা হয়েছে।
ডাইনামিক্যালি মেমোরি বরাদ্দ এবং স্ট্রাকচারের পয়েন্টার
C++ এ new অপারেটর ব্যবহার করে স্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা যায় এবং পয়েন্টারের মাধ্যমে সেই মেম্বারগুলিকে অ্যাক্সেস করা যায়।
উদাহরণ: ডাইনামিক মেমোরি বরাদ্দ এবং স্ট্রাকচারের পয়েন্টার ব্যবহার
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
};
int main() {
// ডাইনামিক্যালি Person স্ট্রাকচারের মেমোরি বরাদ্দ
Person *ptr = new Person;
// মেম্বার ফিল্ডে মান অ্যাসাইন করা
ptr->name = "Bob";
ptr->age = 30;
// মান প্রদর্শন করা
cout << "Name: " << ptr->name << endl; // Output: Name: Bob
cout << "Age: " << ptr->age << endl; // Output: Age: 30
// মেমোরি মুক্ত করা
delete ptr;
return 0;
}
বর্ণনা:
- এখানে
newঅপারেটর ব্যবহার করেPersonস্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা হয়েছে এবংptrনামের একটি পয়েন্টার সেটির ঠিকানা ধারণ করছে। ptr->nameএবংptr->ageব্যবহার করে মেম্বার ফিল্ডে মান অ্যাসাইন করা হয়েছে এবং প্রদর্শন করা হয়েছে।deleteঅপারেটর ব্যবহার করে ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।
অ্যারে অফ স্ট্রাকচারের পয়েন্টার
পয়েন্টার ব্যবহার করে স্ট্রাকচারের অ্যারে তৈরি করা যায় এবং সেই অ্যারের প্রতিটি উপাদানে অ্যাক্সেস করা সম্ভব।
উদাহরণ: অ্যারে অফ স্ট্রাকচারের পয়েন্টার
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
};
int main() {
// 3টি স্ট্রাকচার অবজেক্টের জন্য মেমোরি বরাদ্দ
Person *persons = new Person[3];
// প্রতিটি অবজেক্টের মেম্বার সেট করা
persons[0].name = "Alice";
persons[0].age = 25;
persons[1].name = "Bob";
persons[1].age = 30;
persons[2].name = "Charlie";
persons[2].age = 35;
// অবজেক্টের তথ্য প্রদর্শন
for (int i = 0; i < 3; i++) {
cout << "Person " << i + 1 << " - Name: " << persons[i].name << ", Age: " << persons[i].age << endl;
}
// মেমোরি মুক্ত করা
delete[] persons;
return 0;
}
বর্ণনা:
- এখানে
Personস্ট্রাকচারের একটি অ্যারে ডাইনামিক্যালি তৈরি করা হয়েছে, যার আকার ৩। - প্রতিটি অবজেক্টের
nameএবংageমেম্বারে আলাদা আলাদা মান সেট করা হয়েছে। forলুপ ব্যবহার করে প্রতিটি অবজেক্টের তথ্য প্রদর্শন করা হয়েছে।- অবশেষে
delete[]অপারেটর ব্যবহার করে ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।
সারসংক্ষেপ
- স্ট্রাকচারের পয়েন্টার ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বার সহজেই অ্যাক্সেস এবং ম্যানিপুলেট করা যায়।
- পয়েন্টারের মাধ্যমে স্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা সম্ভব।
- স্ট্রাকচারের জন্য অ্যারে অফ পয়েন্টার তৈরি করে একই ধরনের একাধিক ডেটা মেম্বার পরিচালনা করা যায়।
স্ট্রাকচারের সাথে পয়েন্টার ব্যবহার প্রোগ্রামিংয়ে মেমোরি ব্যবস্থাপনা এবং ডেটা ম্যানেজমেন্টকে সহজতর করে, যা বড় প্রোগ্রামে কার্যকর।