সি প্রোগ্রামিং ভাষায় স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহার করে স্ট্রাকচারের ডেটা আরও কার্যকরভাবে অ্যাক্সেস এবং ম্যানিপুলেট করা যায়। পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারগুলো সরাসরি মেমোরি অ্যাড্রেস ব্যবহার করে অ্যাক্সেস করা হয়, যা প্রোগ্রামের কার্যকারিতা বৃদ্ধি করে।
স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহারের উদ্দেশ্য
১. মেমোরি অপটিমাইজেশন: পয়েন্টার ব্যবহার করে স্ট্রাকচারের মেম্বারগুলোর মেমোরি অ্যাড্রেস ধরে রাখা সম্ভব হয়, যা মেমোরি অপটিমাইজেশনে সহায়ক। ২. ফাংশনে স্ট্রাকচার পাস করা: স্ট্রাকচারের পুরো কপি পাঠানোর পরিবর্তে শুধুমাত্র পয়েন্টার পাস করে মেমোরি সাশ্রয় করা যায়। ৩. ডাইনামিক মেমোরি ম্যানেজমেন্ট: পয়েন্টার ব্যবহার করে ডাইনামিক্যালি স্ট্রাকচারের মেমোরি বরাদ্দ ও মুক্ত করা সম্ভব।
উদাহরণ: স্ট্রাকচার এবং পয়েন্টার ব্যবহার
১. পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারে প্রবেশ
স্ট্রাকচারের মেম্বারে পয়েন্টার ব্যবহার করে প্রবেশ করতে -> (অ্যারো অপারেটর) ব্যবহার করা হয়।
গঠন:
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ফাংশনের মাধ্যমে সেই মেমোরি মুক্ত করা হয়েছে।
সংক্ষেপে
- স্ট্রাকচার এবং পয়েন্টার একত্রে ব্যবহার করে মেমোরি অপটিমাইজেশন, মেম্বারে দ্রুত প্রবেশ এবং ডাইনামিক মেমোরি ম্যানেজমেন্ট করা যায়।
->অপারেটর ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারগুলোতে প্রবেশ করা হয়।
Read more