মডিউল ১৪-৮ঃ পয়েন্টার

আমরা অনেক ধরনের ভেরিয়েবল নিয়ে কাজ করেছি। আমরা জানি এই ভেরিয়েবলগুলো মেমরিতে সেইভ থাকে। প্রতিটি মেমরির একটি এড্রেস থাকে। আমরা যদি এড্রেসটি দেখতে চাই তাহলে এভাবে লিখতে পারিঃ

#include<stdio.h>
int main()
{
    int x = 10;     
    printf("Value = %d\n",x);     // x এর মান প্রিন্ট করছি।
    printf("Address = %p\n",&x);  // x ভেরিয়েবলটি মেমরিতে কোন এড্রেসে সেইভ আছে তা প্রিন্ট করছি।
}

কোডটি রান করলে দেখব শুরুতে x এর মান প্রিন্ট হচ্ছে তারপর তার এড্রেস। এড্রেসটি হেক্সাডেসিমেল ফরম্যাটে প্রিন্ট হবে। এড্রেস প্রিন্ট করতে হলে আমাদের %p ব্যাবহার করতে হয়। এবং ভেরিয়েবল এর আগে & দিতে হয়।

এবার আমাদের যদি কখনো এই এড্রেসটি স্টোর রাখতে হয় তাহলে আমরা একটি পয়েন্টার ভেরিয়েবল নিতে পারি। পয়েন্টার ভেরিয়েবল অন্য একটি ভেরিয়েবল এর এড্রেসকে স্টোর করে। পয়েন্টার ভেরিয়েবল ডিক্লেয়ার করার সিন্টেক্সঃ data_type ( যেই ভেরিয়েবল এর এড্রেস স্টোর করা হবে তার ডাটা টাইপ ) * pointer_variable_name = & variable_name ( যেই ভেরিয়েবল এর এড্রেস স্টোর করা হবে )

#include<stdio.h>
int main()
{
    int x = 10;
    printf("Address = %p\n",&x);  // x এর এড্রেস সরাসরি প্রিন্ট করা হচ্ছে। 
    int* p = &x;                  // x এর এড্রেস একটি পয়েন্টার ভেরিয়েবলে রাখা হচ্ছে। এখানে পয়েন্টার ভেরিয়েবলটি x কে পয়েন্ট করবে তাই এর ডাটা টাইপ হিসেবে int* দেওয়া হয়েছে। পয়েন্টার এর নাম p দেওয়া হয়েছে।
    printf("Address = %p\n",p);   // পয়েন্টার ভেরিয়েবলটি প্রিন্ট করা হচ্ছে।
}

কোডটি রান করলে আমরা দেখতে পাব সরাসরি x এর এড্রেস প্রিন্ট করা এবং x এর এড্রেস একটি পয়েন্টার ভেরিয়েবলে রেখে তারপর সেই পয়েন্টার প্রিন্ট করা দুইক্ষেত্রেই আমরা সেইম আউটপুট পাচ্ছি।

পয়েন্টার ভেরিয়েবল এর সুবিধা হচ্ছে পয়েন্টার যাকে পয়েন্ট করছে তাকে সরাসরি এক্সেস করা যায় এমনকি সেই ভেরিয়েবল এর মান ও চেঞ্জ করে দেওয়া যায়। এটিকে বলা হয় ডিরেফেরেন্সিং। পয়েন্টার ভেরিয়েবল এর আগে * এই সাইনটি দিয়ে যাকে পয়েন্ট করছে তার ভেলু এক্সেস করা যায়।

#include<stdio.h>
int main()
{
    int x = 10;
    int* p = &x;                 // x এর এড্রেস একটি পয়েন্টার ভেরিয়েবলে রাখা হচ্ছে।
    printf("Value = %d\n",*p);   // পয়েন্টার দিয়ে x এর ভেলু প্রিন্ট করা হচ্ছে।

    *p = 20;                     // পয়েন্টার দিয়ে x এর মান চেঞ্জ করে দেওয়া হচ্ছে।
    printf("Value = %d\n",x);    // পয়েন্টার দিয়ে চেঞ্জ করার পর x কে প্রিন্ট করে দেখা যাচ্ছে x এর মান চেঞ্জ হয়ে গিয়েছে। 
}

এখানে আমরা শুরুতে পয়েন্টার দিয়ে x এর মান প্রিন্ট করে দেখলাম x এর মান যা ছিল তাই প্রিন্ট হয়েছে। তারপর পয়েন্টার দিয়ে x এর মান চেঞ্জ করে দেখা গেল x এর মানও চেঞ্জ হয়ে গিয়েছে।

গিটবুক গুলো আপনাদের কেমন লাগছে? এই ফর্মটি ফিলাপ করে আমাদের জানাতে পারেন। https://forms.gle/7MWEvWcUeKVKrLnn8

Last updated