কম্পিউটার টিউটোরিয়াল

C ভাষায় স্ট্রাকচারের পয়েন্টারের ডাইনামিক মেমরি অ্যালোকেশন ব্যাখ্যা


স্ট্রাকচারের পয়েন্টার পুরো স্ট্রাকচারের অ্যাড্রেস ধারণ করে।

এটি লিংকড লিস্ট, ট্রি, গ্রাফ সadrat জটিল ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হয়।

স্ট্রাকচারের মেম্বারগুলিকে অ্যারো অপারেটর (->) নামে একটি বিশেষ অপারেটর ব্যবহার করে অ্যাক্সেস করা যায়।

ঘোষণা

C প্রোগ্রামিং-এ স্ট্রাকচারের পয়েন্টারগুলোর জন্য ঘোষণাটি নিচে দেওয়া হলো −

struct tagname *ptr;

উদাহরণস্বরূপ: struct student *s;

অ্যাক্সেস করা

স্ট্রাকচারের পয়েন্টারগুলিকে কিভাবে অ্যাক্সেস করতে হয় সেটি নিচে ব্যাখ্যা করা হলো।

Ptr->membername;

উদাহরণস্বরূপ − s->sno, s->sname, s->marks;

উদাহরণ

নিচে C প্রোগ্রামিং-এ স্ট্রাকচারের ডাইনামিক মেমরি অ্যালোকেশন ব্যাখ্যা করা হলো −

#include  #include  struct person { int age; float weight; char name[30]; }; int main(){ struct person *ptr; int i, n; printf("ব্যক্তির সংখ্যা লিখুন: "); scanf("%d", &n); // n সংখ্যক struct person-এর জন্য মেমরি অ্যালোকেট করা ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i < n; ++i){ printf("নাম ও বয়স লিখুন: "); // 1ম struct person-এর মেম্বার অ্যাক্সেস করতে, // ptr->name এবং ptr->age ব্যবহার করা হয় // 2য় struct person-এর মেম্বার অ্যাক্সেস করতে, // (ptr+1)->name এবং (ptr+1)->age ব্যবহার করা হয় scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); } printf("তথ্য প্রদর্শন:\n"); for(i = 0; i < n; ++i) printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age); return 0; }

আউটপুট

উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −

ব্যক্তির সংখ্যা লিখুন: 1 নাম ও বয়স লিখুন: bhanu 24 তথ্য প্রদর্শন: Name: bhanu Age: 24

উদাহরণ ২

পয়েন্টার ও স্ট্রাকচারের উপর আরেকটি উদাহরণ বিবেচনা করুন, যেখানে পয়েন্টার ও স্ট্রাকচার ডেমনস্ট্রেট করার C প্রোগ্রাম দেওয়া হলো।

#include  // আউটার ও ইনার স্ট্রাকচার ঘোষণা // struct Manager{ char Name[15]; int Age; char Gender; float Level; char Role[50]; char temp; }m[20]; void main(){ // ফর লুপ ও পয়েন্টার ভেরিয়েবলের জন্য ভেরিয়েবল ঘোষণা // int i; struct Manager *p; // পয়েন্টার ডিফাইন করা // p = &m; // ইউজার ইনপুট পড়া // for (i=1; i<3; i++){ // 2 জন ম্যানেজারের ডেটা গ্রহণের জন্য ফাংশন ঘোষণা // printf("Enter the Name of manager %d : ", i); gets(p->Name); printf("Enter the Age of manager %d : ", i); scanf("%d", &p->Age); scanf("%c", &p->temp); // বাফার ক্লিয়ার করা // printf("Enter the Gender of manager %d : ", i); scanf("%c", &p->Gender); // scanf("%c", &p->temp); // বাফার ক্লিয়ার করা // printf("Enter the level of manager %d : ", i); scanf("%f", &p->Level); scanf("%c", &p->temp); // বাফার ক্লিয়ার করা // printf("Enter the role of manager %d : ", i); gets(p->Role); p++; } // আউটপুট প্রিন্ট করার জন্য একবার আর পয়েন্টার ডিফাইন করা // p = &m; // আউটপুট প্রিন্ট করা // for (i=1; i<3; i++){ printf("The Name of Manager %d is : %s\n", i, p->Name); printf("The Age of Manager %d is : %d\n", i, p->Age); printf("The Gender of Manager %d is : %c\n", i, p->Gender); printf("The Level of Manager %d is : %f\n", i, p->Level); printf("The Role of Manager %d is : %s\n", i, p->Role); p++; } }

আউটপুট

উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −

Enter the Name of manager 1 : Hari Enter the Age of manager 1 : 55 Enter the Gender of manager 1 : M Enter the level of manager 1 : 2 Enter the role of manager 1 : Senior Enter the Name of manager 2 : Bob Enter the Age of manager 2 : 60 Enter the Gender of manager 2 : M Enter the level of manager 2 : 1 Enter the role of manager 2 : CEO The Name of Manager 1 is : Hari The Age of Manager 1 is : 55 The Gender of Manager 1 is : M The Level of Manager 1 is : 2.000000 The Role of Manager 1 is : Senior The Name of Manager 2 is : Bob The Age of Manager 2 is : 60 The Gender of Manager 2 is : M The Level of Manager 2 is : 1.000000 The Role of Manager 2 is : CEO

  1. C ভাষায় ইনসার্শন সোর্ট (Insertion Sort) ব্যাখ্যা

  2. C ভাষায় ক্যারেক্টার অপারেশন ব্যাখ্যা

  3. সি ভাষায় ইউনিয়ন টু পয়েন্টার ব্যাখ্যা

  4. সি ভাষায় পয়েন্টার অ্যাক্সেসিং ধারণা ব্যাখ্যা