সি প্রোগ্রামিং স্ট্রাকচার এবং পয়েন্টার -C Programming Structure and Pointer
সি প্রোগ্রামিং স্ট্রাকচার এবং পয়েন্টার
পয়েন্টার(pointer) ব্যবহার করে স্ট্রাকচার(structure) তৈরি এবং এক্সেস উভয়ই করা যেতে পারে। নিম্নের ন্যায় স্ট্রাকচার টাইপের পয়েন্টার ভ্যারিয়েবল তৈরি করা যেতে পারেঃ
struct name { member1; member2; . . }; int main() { struct name *ptr; }
উপরের প্রোগ্রামে struct name
টাইপের একটি পয়েন্টার ভ্যারিয়েবল(*ptr) তৈরি হয়েছে।
পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করা
পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বার(member) কে দুইভাবে এক্সেস করা যায়ঃ
- পয়েন্টারকে অন্য এড্রেসে রেফার করে মেমোরি এক্সেস করা
- ডাইনামিক মেমোরি এলোকেশন(dynamic memory allocation) ব্যবহার করে।
১। পয়েন্টারকে অন্য এড্রেসে রেফার করে মেমোরি এক্সেস করা
পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য সি প্রোগ্রামঃ
#include <stdio.h>
typedef struct person
{
int age;
float weight;
};
int main()
{
struct person *personPtr, person1;
personPtr = &person1; //person1 এর মেমোরি এড্রেসে পয়েন্টারকে রেফার করা
printf("Enter integer: ");
scanf("%d",&(*personPtr).age);
printf("Enter number: ");
scanf("%f",&(*personPtr).weight);
printf("Displaying: ");
printf("%d%f",(*personPtr).age,(*personPtr).weight);
return 0;
}
উপরের উদাহরণে struct person
টাইপের পয়েন্টার ভ্যারিয়েবলকে person1 ভ্যারিয়েবলের এড্রেসে রেফার(refer) করা হয়েছে। তাই শুধুমাত্র পয়েন্টারের মাধ্যমে স্ট্রাকচার মেম্বারকে এক্সেস(access) করা যায়।
স্ট্রাকচার এর পয়েন্টার মেম্বারকে এক্সেস করার জন্য ->(Arrow) অপারেটর ব্যবহার করা হয়।
.(Dot)
অপারেটর ব্যবহার করেও স্ট্রাকচার এর পয়েন্টার মেম্বারকে এক্সেস করতে পারেন।
(*personPtr).age এবং personPtr->age একই রকম (*personPtr).weight এবং personPtr->weight একই রকম
২। ডাইনামিক মেমোরি এলোকেশন ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করা
পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য malloc() ফাংশন ব্যবহার করে ডাইনামিকভাবে মেমোরি বরাদ্দ করা যেতে পারে।
malloc() ব্যবহারের সিনট্যাক্স
ptr = (cast-type*) malloc(byte-size)
malloc() ফাংশন ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য সি প্রোগ্রাম
#include <stdio.h>
#include <stdlib.h>
struct person {
int age;
float weight;
char name[30];
};
int main()
{
struct person *personPtr;
int i,num;
printf("Enter number of persons: ");
scanf("%d", &num);
personPtr = (struct person*) malloc(n * sizeof(struct person));
//personPtr পয়েন্টারের জন্য উপরের স্টেটমেন্টটি n সংখ্যক স্ট্রাকচারের জন্য মেমোরি বরাদ্দ করে */
for(i = 0; i < n; ++i)
{
printf("Enter name, age and weight of the person respectively:\n");
scanf("%s%d%f", &(ptr+i)->name, &(ptr+i)->age, &(ptr+i)->weight);
}
printf("Displaying Infromation:\n");
for(i = 0; i < num; ++i)
printf("%s\t%d\t%.2f\n", (ptr+i)->name, (ptr+i)->age, (ptr+i)->weight);
return 0;
}
আউটপুট
Enter number of persons: 2 Enter name, age and weight of the person respectively: Adam 2 3.2 Enter name, age and weight of the person respectively: Eve 6 2.3 Displaying Information Adam 2 3.20 Eve 6 2.30