অধ্যায় ১৩: পয়েন্টার (Pointer)—কম্পিউটারের মেমোরির অলিগলিতে উঁকি দেওয়ার গোপন চাবি!
হ্যালো ফিউচার কোডারস! C ল্যাঙ্গুয়েজ শিখতে গিয়ে ইন্টারনেটে বা বড় ভাইদের কাছে একটা কথা নিশ্চয়ই শুনেছ—“সব ঠিক আছে, কিন্তু পয়েন্টার চ্যাপ্টারে গেলেই মাথা ঘুরে যায়!”
আজকে আমরা এমনভাবে পয়েন্টার শিখবো, যাতে তোমার মাথা ঘোরানো তো দূরের কথা, মনে হবে এটা তো জাস্ট একটা বাচ্চার খেলা!
আমরা ৩ নম্বর অধ্যায়ে ভেরিয়েবল বা ম্যাজিক বক্সের কথা শিখেছিলাম, মনে আছে? আমরা জেনেছিলাম, ভেরিয়েবলের ভেতরে ডেটা রাখা যায়। কিন্তু এই ম্যাজিক বক্সগুলো কম্পিউটারের RAM বা মেমোরির ঠিক কোন জায়গায় গিয়ে বসে? মেমোরির তো একটা বিশাল মানচিত্র আছে এবং প্রতিটা বক্সের একটা নির্দিষ্ট বাসার ঠিকানা বা এড্রেস (Address) আছে।
এই মেমোরির ঠিকানাকে খুঁজে বের করা আর সেটা নিয়ে খেলা করার সুপারপাওয়ার যার আছে, তাকেই বলে পয়েন্টার (Pointer)!
🗺️ পয়েন্টার আসলে কী? (বাস্তব জীবনের উদাহরণ)
সহজ কথায়, পয়েন্টার হলো এমন একটি স্পেশাল ভেরিয়েবল বা বক্স, যা নিজের ভেতরে কোনো সাধারণ সংখ্যা না রেখে অন্য একটি ভেরিয়েবলের “বাসার ঠিকানা” জমা রাখে!
একটি বাস্তব উদাহরণ দেওয়া যাক। মনে করো, তোমার বন্ধু একটা ডায়েরিতে তার নতুন সাইকেলের তালা খোলার গোপন পাসওয়ার্ড লিখে রেখেছে। এখন তুমি যদি সেই ডায়েরিটার পৃষ্ঠা নম্বর এবং আলমারির লোকেশন (ঠিকানা) একটি কাগজে লিখে তোমার পকেটে রাখো, তবে তোমার পকেটের ওই কাগজটাই হলো একটা পয়েন্টার! ও নিজে পাসওয়ার্ড নয়, কিন্তু ও জানে পাসওয়ার্ডটা কোথায় আছে।
🛠️ পয়েন্টারের দুই জাদুকরী সাইন: & এবং *
পয়েন্টার নিয়ে কাজ করতে গেলে আমাদের দুটি সাইন খুব ভালোভাবে বুঝতে হবে: ১. & (Address of Operator): এটি ভেরিয়েবলের বাসার ঠিকানা খুঁজে বের করে। (যেমন: &age মানে age-এর ঠিকানা)। ২. * (Value at Address Operator): এটি ওই ঠিকানায় ঢুকে ভেতরে কী ডেটা আছে তা বের করে আনে। একে পয়েন্টার তৈরি করার সময়ও ব্যবহার করা হয়।
💻 চলো মেমোরির ভেতরে উঁকি দিই!
কোড ব্লকে গিয়ে নিচের কোডটি ঝটপট লিখে রান করো এবং দেখো কম্পিউটারের মেমোরি অ্যাড্রেস দেখতে কেমন হয়:
C
#include <stdio.h>
int main() {
int age = 16; // একটি সাধারণ ভেরিয়েবল
int *ptr; // একটি পয়েন্টার ভেরিয়েবল তৈরি করলাম (* দিয়ে)
ptr = &age; // age-এর মেমোরি ঠিকানাটি ptr-এর ভেতর রেখে দিলাম
// ১. সাধারণ ভেরিয়েবলের মান
printf("Age এর মান: %d\n", age);
// ২. মেমোরি এড্রেস বা ঠিকানা দেখার ম্যাজিক (%p ব্যবহার করতে হয়)
printf("Age ভেরিয়েবলটি মেমোরির কোন ঠিকানায় আছে? : %p\n", &age);
// ৩. পয়েন্টার কী ধরে রেখেছে?
printf("পয়েন্টার ptr এর ভেতরে থাকা ঠিকানা: %p\n", ptr);
// ৪. পয়েন্টার দিয়ে ঠিকানার ভেতরের মান দেখা
printf("পয়েন্টার যে ঠিকানায় আঙুল তুলেছে, তার ভেতরের মান: %d\n", *ptr);
return 0;
}
🔍 টিনএজ নোট: কোডটি রান করলে তুমি
%p-এর জায়গায়0061FF1C-এর মতো অদ্ভুত কিছু সংখ্যা আর অক্ষরের মিশ্রণ দেখতে পাবে। ভয় পেও না! ওটাই হলো কম্পিউটারের মেমোরির আসল লকার নম্বর বা ঠিকানা (Hexadecimal Code)। একেকবার রান করলে এটি একেক রকম আসতে পারে।
💡 আজকের কোডিং চ্যালেঞ্জ (Coding Challenge!)
আজকের টাস্কটি একটু বুদ্ধি খাটানোর। ১. একটি দশমিক সংখ্যার ভেরিয়েবল তৈরি করো (যেমন: float gpa = 4.95;)। ২. একটি ফ্লোট পয়েন্টার তৈরি করো (float *p;) এবং জিপিএ-র ঠিকানা তাতে রাখো। ৩. পয়েন্টার ব্যবহার করে স্ক্রিনে জিপিএ-র মানটি প্রিন্ট করে দেখাও।
কোডটি রান করতে পারলে কমেন্টে আমাদের একটি বুড়ো আঙুল বা থাম্বস-আপ (👍) দিয়ে দাও! আর এরর আসলে তো আমরা আছিই।
আগামী পর্বে আমরা শিখবো কীভাবে বিভিন্ন ধরণের ডেটাকে একসাথে জোড়া দিয়ে নতুন কাস্টম ডেটা টাইপ তৈরি করা যায়, অর্থাৎ ‘স্ট্রাকচার’ (Structure)! চোখ রাখো tolearnteam.com-এ!
Read All Articles
- শূন্য থেকে প্রোগ্রামিং হিরো: C Language ফুল কোর্স!
- কোডিংয়ের হাতেখড়ি: তোমার কম্পিউটারে প্রথম প্রোগ্রাম!
- মেমোরির ম্যাজিক বক্স: ভেরিয়েবল এবং ডেটা টাইপের সহজ পাঠ!
- কম্পিউটার এবার কথা শুনবে! ইউজারের কাছ থেকে ইনপুট নেওয়ার ম্যাজিক
- কম্পিউটারের নিজস্ব মগজ! if-else দিয়ে সিদ্ধান্ত নেওয়ার ম্যাজিক
- জিপিএ ক্যালকুলেটরের রহস্য! else if দিয়ে একাধিক শর্ত মেলানোর ট্রিক
- লজিকের সুপারপাওয়ার! AND এবং OR অপারেটর দিয়ে এক লাইনে একাধিক শর্ত মেলানোর ট্রিক
- এক কোডেই হাজার বার! লুপ (Loop) ব্যবহার করে কম্পিউটারের খাটুনি কমানোর ট্রিক
- শর্ত না মিললে নো এন্ট্রি! while এবং do-while লুপের ভেতরের গল্প
- কোড গুছানোর ম্যাজিক বক্স! C ল্যাঙ্গুয়েজে ফাংশন (Function) কেন এত দরকারি?
- মেমোরির লম্বা ট্রেন! C ল্যাঙ্গুয়েজে অ্যারে (Array) কী এবং কেন শিখব?
- অক্ষরের মালা! C ল্যাঙ্গুয়েজে স্ট্রিং (String) দিয়ে নিজের নাম প্রিন্ট করার ট্রিক
- মেমোরির গোপন ঠিকানা! C ল্যাঙ্গুয়েজে পয়েন্টার (Pointer) কী এবং কেন মানুষ একে ভয় পায়?
- নিজের ইচ্ছায় ডেটা টাইপ! C ল্যাঙ্গুয়েজে স্ট্রাকচার (Structure) দিয়ে কাস্টম প্রোফাইল তৈরির ট্রিক
- এবার আসল প্রজেক্ট! C ল্যাঙ্গুয়েজ দিয়ে নিজের তৈরি প্রথম “স্মার্ট ক্যালকুলেটর”
- C তো শিখলাম, এরপর কী? প্রোগ্রামিং দুনিয়ায় পরবর্তী স্বপ্নের জার্নি!
