আগের পর্বে আমরা ডাটা স্ট্রাকচার ডিফাইন করা এবং কীভাবে এক্সেস করতে হয় সেটা দেখেছিলাম। আজ আমরা ডাটা স্ট্রাকচার নিয়ে আরও কিছু সহজ কাজ করবো।
ফাংশনের আর্গুমেন্ট হিসেবে ডাটা স্ট্রাকচার
আমরা অন্যান্য ভ্যারিয়েবলের মত ডাটা স্ট্রাকচারও ফাংশনের আর্গুমেন্ট হিসেবে পাঠাতে পারি। এজন্য আমাদের লিখতে হবেঃ
struct Celebrity { // bla bla bla }; void myFunction ( struct Celebrity numberOne) { // bla bla bla {
এক্ষেত্রে স্ট্রাকচারের ডেফিনিশন গ্লোবাল স্পেসে দিতে হবে। কেন সেটা তোমার নিজেরই বুঝতে পারার কথা! 😀 আমরা একটি সম্পূর্ণ কোড লিখেই ব্যাপারটা বুঝার চেষ্টা করি। এজন্য আমরা গত দিনের কাজটা একটা ফাংশনের সাহায্যে করার চেষ্টা করবো।
#include <stdio.h> #include <string.h> struct celebrity { char movie[20]; char food[20]; }; void printInfo(struct celebrity ekjon) { printf("Favourite Food: %s\n", ekjon.food); printf("Favourite Movie: %s\n", ekjon.movie); } int main() { struct celebrity number1, number2; printf("Input for celebrity 1: \n"); gets(number1.food); gets(number1.movie); printf("Input for celebtrity 2: \n"); gets(number2.food); gets(number2.movie); printf("\n\n"); printf("For #1:\n"); printInfo( number1); printf("For #2:\n"); printInfo( number2); return 0; }
এই কোডে আগের মতই ইনপুট দিয়ে আউটপুট চেক করে দেখতে পার!
স্ট্রাকচারের পয়েন্টার
বাকি ভ্যারিয়েবলগুলোর মত স্ট্রাকচারের পয়েন্টারও নিচের মত ডিক্লেয়ার করা হয়ঃ
struct celebrity *struct_pointer;
আবার সেখানে number1-এর অ্যাড্রেস রাখতে লিখবোঃ
struct_pointer = &number1;
তবে একটি স্ট্রাকচারের মেম্বারকে এক্ষেত্রে ডট অপারেটর দিয়ে এক্সেস করা যাবে না। ব্যবহার করতে হবে -> অপারেটর। যেমনঃ
struct_pointer->movie;
এবার তাহলে আমাদের আগের কোডটি পয়েন্টারের সাহায্যে লিখি।
#include <stdio.h> #include <string.h> struct celebrity { char movie[20]; char food[20]; }; void printInfo(struct celebrity *ekjon) { // argument hishebe structure tar pointer nicchi printf("Favourite Food: %s\n", ekjon->food); // food member ta ke access kortichi printf("Favourite Movie: %s\n", ekjon->movie); // movie member ta ke access kortichi } int main() { struct celebrity number1, number2; printf("Input for celebrity 1: \n"); gets(number1.food); gets(number1.movie); printf("Input for celebtrity 2: \n"); gets(number2.food); gets(number2.movie); printf("\n\n"); printf("For #1:\n"); printInfo( &number1); // argument hishebe pathacchi number1 structure er address printf("For #2:\n"); printInfo( &number2); // argument hishebe pathacchi number2 structure er address return 0; }
পয়েন্টার ভাল মত বুঝলে এটা বুঝতে সমস্যা হওয়ার কথা না। পয়েন্টার না বুঝলে সেটা আবার পড়ে আস!
typedef কীওয়ার্ড
বারবার এই struct কথাটা লেখা যথেষ্ট বিরক্তিকর, তাই না? আমরা চাইলে typedef ব্যবহার করে একবার লিখেই ক্ষান্ত দিতে পারি। এজন্য স্ট্রাকচার ডিফাইন করার সময় লিখবোঃ
typedef struct celebrity { char movie[20]; char food[20]; } celeb;
তাহলে celeb হয়ে যাবে নতুন একটি ডাটা টাইপ। এরপর আর struct celebrity কথাটা না লিখলেও চলবে। শুধু celeb লিখলেই হয়ে যাবে! যেমন, নিচের কোডটা দেখঃ
#include <stdio.h> #include <string.h> typedef struct celebrity { char movie[20]; char food[20]; } celeb; void printInfo( celeb *ekjon) { // argument hishebe structure tar pointer nicchi printf("Favourite Food: %s\n", ekjon->food); // food member ta ke access kortichi printf("Favourite Movie: %s\n", ekjon->movie); // movie member ta ke access kortichi } int main() { celeb number1, number2; printf("Input for celebrity 1: \n"); gets(number1.food); gets(number1.movie); printf("Input for celebtrity 2: \n"); gets(number2.food); gets(number2.movie); printf("\n\n"); printf("For #1:\n"); printInfo( &number1); // argument hishebe pathacchi number1 structure er address printf("For #2:\n"); printInfo( &number2); // argument hishebe pathacchi number2 structure er address return 0; }
এই পর্ব এখানেই শেষ। ডাটা স্ট্রাকচার অত্যন্ত গুরুত্বপূর্ন একটি জিনিস। অনেক ধরণের ডাটা স্ট্রাকচার আমাদেরকে প্রতিনিয়ত ব্যবহার করতে হয়। যেমন, লিস্ট, ট্রি, ট্যাবল, বিটম্যাপ, হিপ, Trie, হ্যাশ, গ্রাফ ইত্যাদি। এগুলো নিয়ে অন্য একটি সিরিজে আলোচনা হবে। হয়তো লিখবো আমি, কিংবা অন্য কেউ!
এবং একই সাথে সি-এর সাথে সম্পর্কিত সি++-এর অংশটাও এখানেই সমাপ্তি। আগামী পর্ব থেকেই সি++-এর একান্তই নিজস্ব জিনিসপত্র দেখা শুরু! 😀
সহজবোধ্য এবং অসাধারণ