প্রোগ্রামিংয়ের জগতে প্রথম পদক্ষেপ C Programming for Beginners
প্রোগ্রামিংয়ের জগতে প্রথম পদক্ষেপ C Programming for Beginners

C প্রোগ্রামিং – চতুর্থ অধ্যায়: পয়েন্টার (Pointer) – কম্পিউটারের ঠিকানার খেলা!

শুরুর আগে একটা মজার প্রশ্ন!
তোমার বাসার ঠিকানা যদি ‘৩৫, শান্তিনগর’ হয়, তাহলে কি কেউ তোমাকে খুঁজে পেতে পারে? হ্যাঁ! কারণ ওই ঠিকানায় গিয়েই তো তোমাকে পাওয়া যায়। কম্পিউটারের মেমরিতেও ঠিক একই ব্যাপার। প্রতিটি ভেরিয়েবলের একটা মেমরি অ্যাড্রেস (ঠিকানা) থাকে। পয়েন্টার হলো সেই ঠিকানা ধরে রাখার ‘ম্যাজিক চাবি’। আজ আমরা শিখবো কীভাবে সেই চাবি ব্যবহার করে কম্পিউটারের মেমরির ভেতর সরাসরি হাত লাগানো যায়!


🏠 অধ্যায় ১: মেমরি অ্যাড্রেস – ‘&’ চিহ্নের জাদু

তুমি যখন কোনো ভেরিয়েবল বানাও, কম্পিউটার মেমরির একটা ঘরে তা সংরক্ষণ করে। সেই ঘরের নাম্বারটাই হলো অ্যাড্রেস। আমরা চাইলে সেই অ্যাড্রেস প্রিন্ট করে দেখতে পারি!

text

#include <stdio.h>
int main() {
    int বয়স = ১৬;
    printf("বয়সের মান: %d\n", বয়স);
    printf("বয়সের মেমরি ঠিকানা: %p", &বয়স);  // %p দিয়ে ঠিকানা প্রিন্ট হয়
    return 0;
}

আউটপুট (আমার কম্পিউটারে):
বয়সের মান: ১৬
বয়সের মেমরি ঠিকানা: 0061FF1C (তোমার কম্পিউটারে আলাদা নাম্বার আসবে)

🔍 খেয়াল করো: & চিহ্নটা দিয়ে আমরা ভেরিয়েবলের ঠিকানা পেয়ে গেলাম! এই &-কে বলে ‘অ্যাড্রেস অফ’ অপারেটর।


🔑 অধ্যায় ২: পয়েন্টার আসলে কী? (ঠিকানা ধরে রাখার বাক্স)

পয়েন্টার হলো একটা স্পেশাল ভেরিয়েবল, যার ভেতর আমরা শুধু অ্যাড্রেস স্টোর করি। ঠিক যেমন int ভেরিয়েবলে সংখ্যা রাখি, তেমন পয়েন্টারে ঠিকানা রাখি।

ডিক্লেয়ারেশন:
ডেটা_টাইপ *পয়েন্টারের_নাম;

উদাহরণ:
int *p; → এই p পয়েন্টার শুধু int টাইপের ভেরিয়েবলের ঠিকানা রাখতে পারবে।

text

#include <stdio.h>
int main() {
    int বয়স = ১৬;
    int *পয়েন্টার = &বয়স;  // পয়েন্টার ভেরিয়েবলে বয়সের ঠিকানা রাখলাম
    
    printf("বয়সের মান: %d\n", বয়স);
    printf("পয়েন্টারে রাখা ঠিকানা: %p\n", পয়েন্টার);
    return 0;
}

আউটপুট:
বয়সের মান: ১৬
পয়েন্টারে রাখা ঠিকানা: 0061FF1C (যা &বয়স-এর সমান)


🧙 অধ্যায় ৩: ‘*’ তারকা চিহ্নের আসল ক্ষমতা (ডিরেফারেন্স)

পয়েন্টার দিয়ে যদি ঠিকানা ধরি, তাহলে কীভাবে ওই ঠিকানায় বসে থাকা মানটা পড়বো? এর জন্য আছে * (অ্যাসটেরিস্ক) চিহ্ন। একে বলে ডিরেফারেন্স অপারেটর।

text

#include <stdio.h>
int main() {
    int বয়স = ১৬;
    int *পয়েন্টার = &বয়স;
    
    printf("ঠিকানায় বসে থাকা মান: %d\n", *পয়েন্টার);  // *পয়েন্টার দিয়ে মান পেলাম
    
    // এখন পয়েন্টার দিয়ে মান পরিবর্তন করি!
    *পয়েন্টার = ২০;
    printf("পরিবর্তিত বয়স: %d", বয়স);  // আসল ভেরিয়েবলও বদলে গেল!
    return 0;
}

আউটপুট:
ঠিকানায় বসে থাকা মান: ১৬
পরিবর্তিত বয়স: ২০

😲 বুঝলে কী হলো? পয়েন্টার দিয়ে সরাসরি মেমরিতে ঢুকে ভেরিয়েবলের মান বদলে ফেললাম! এটাই পয়েন্টারের সবচেয়ে বড় জাদু।


📞 অধ্যায় ৪: ফাংশনে পয়েন্টার (Call by Reference)

মনে করো, তুমি একটা ফাংশনে গিয়ে দুটি সংখ্যা অদলবদল (Swap) করতে চাও। আগের অধ্যায়ে আমরা দেখেছি, সাধারণ ভেরিয়েবল পাঠালে ফাংশনের ভেতর শুধু কপি যায়, আসল ভেরিয়েবল বদলায় না। কিন্তু পয়েন্টার পাঠালে আসল ভেরিয়েবলই বদলে যায়! একে বলে Call by Reference।

text

#include <stdio.h>

void অদলবদল(int *a, int *b) {
    int টেম্প = *a;
    *a = *b;
    *b = টেম্প;
}

int main() {
    int প্রথম = ১০, দ্বিতীয় = ২০;
    printf("বদলের আগে: প্রথম = %d, দ্বিতীয় = %d\n", প্রথম, দ্বিতীয়);
    
    অদলবদল(&প্রথম, &দ্বিতীয়);  // ঠিকানা পাঠালাম
    printf("বদলের পরে: প্রথম = %d, দ্বিতীয় = %d\n", প্রথম, দ্বিতীয়);
    return 0;
}

আউটপুট:
বদলের আগে: প্রথম = ১০, দ্বিতীয় = ২০
বদলের পরে: প্রথম = ২০, দ্বিতীয় = ১০

🎯 মনে রেখো: ফাংশনের ভেতর *a লিখলে সেটা আসল প্রথম-এর মান ধরে। তাই বাইরেও পরিবর্তন দেখা যায়!


🔗 অধ্যায় ৫: অ্যারে আর পয়েন্টার – দুই বন্ধু!

অ্যারে আর পয়েন্টারের সম্পর্ক খুব গভীর। অ্যারের নাম আসলে প্রথম এলিমেন্টের ঠিকানা ধরে রাখে!

text

#include <stdio.h>
int main() {
    int সংখ্যা[৩] = {১০, ২০, ৩০};
    printf("অ্যারের প্রথম এলিমেন্টের মান: %d\n", *সংখ্যা);  // সংখ্যা = &সংখ্যা[০]
    printf("দ্বিতীয় এলিমেন্টের মান: %d\n", *(সংখ্যা + ১));  // ২০
    printf("তৃতীয় এলিমেন্টের মান: %d\n", *(সংখ্যা + ২));  // ৩০
    return 0;
}

💡 ব্যাখ্যা:

  • সংখ্যা হলো অ্যারের শুরু (০ নম্বর ঘরের ঠিকানা)।
  • সংখ্যা + ১ মানে পরের ঘরের ঠিকানা (যেহেতু int ৪ বাইট করে, কম্পিউটার নিজেই বুঝে নেয়)।
  • *(সংখ্যা + ১) দিয়ে ওই ঠিকানার মান পাচ্ছি। এভাবে অ্যারের কোনো এলিমেন্টে যেতে []-এর বদলে পয়েন্টর অ্যারিথমেটিক ব্যবহার করতে পারো!

🧠 অধ্যায় ৬: পয়েন্টার কেন শিখবি? (বাস্তব জীবনের গুরুত্ব)

১. গেমস আর গ্রাফিক্স: গেমের পিক্সেলের ডেটা মেমরিতে থাকে। পয়েন্টার দিয়ে সরাসরি সেই ডেটা পরিবর্তন করলেই তুমি গেমের কালার বা লেভেল চেঞ্জ করতে পারো।
২. ডেটা স্ট্রাকচার: লিংকড লিস্ট, ট্রি, গ্রাফ—এসবের ভিত্তি হলো পয়েন্টার। তুমি চাইলে নিজেই নতুন ডেটা স্ট্রাকচার বানাতে পারবে!
৩. হার্ডওয়্যার কন্ট্রোল: রোবট বা মাইক্রোকন্ট্রোলার প্রোগ্রামিংয়ে পয়েন্টার দিয়ে সরাসরি পিনের মান কন্ট্রোল করা হয়।
৪. মেমরি সাশ্রয়: বড় বড় অ্যারে বা স্ট্রিং ফাংশনে পাঠানোর সময় পুরো কপি না করে শুধু ঠিকানা পাঠালে মেমরি বাঁচে আর প্রোগ্রাম দ্রুত চলে।


🏠 তোমার জন্য হোমওয়ার্ক (চেষ্টা করতে হবে!)

১. int মান = ৫০; একটি পয়েন্টার দিয়ে ওই মান প্রিন্ট করো এবং পয়েন্টার দিয়ে মান ১০০ করে দাও। তারপর আসল ভেরিয়েবল প্রিন্ট করো।
২. অদলবদল ফাংশনটা (Swap) নিজে নিজে লিখে রান করাও।
৩. int সংখ্যা[৫] = {২, ৪, ৬, ৮, ১০}; পয়েন্টার অ্যারিথমেটিক ব্যবহার করে সব এলিমেন্টের যোগফল বের করো (লুপের ভেতর *(সংখ্যা + i) ব্যবহার করো)।


⚠️ সাবধানতা (পয়েন্টার নিয়ে ভুল)

  • নাল পয়েন্টার: কখনো পয়েন্টারকে NULL না দিয়ে ব্যবহার করো না। int *p = NULL; তারপর *p = ৫; লিখলে কম্পিউটার ক্র্যাশ করবে! (কারণ ঠিকানা নেই)।
  • টাইপ মিসম্যাচ: float ভেরিয়েবলের ঠিকানা কখনো int * পয়েন্টারে রাখবে না। তাহলে ভুল মান আসবে।
  • অ্যারের সীমার বাইরে: সংখ্যা + ১০ লিখে যদি ৫ সাইজের অ্যারেতে ঢুকো, তাহলে অন্য ডেটা নষ্ট হয়ে যেতে পারে (একে বলে Buffer Overflow)।

🚀 শেষ কথা

আজ তুমি শিখলে—
✅ ভেরিয়েবলের মেমরি ঠিকানা বের করা (&)।
✅ পয়েন্টার বানিয়ে ঠিকানা সংরক্ষণ করা।
✅ * দিয়ে ঠিকানা থেকে মান বের করা ও পরিবর্তন করা।
✅ ফাংশনে পয়েন্টার পাঠিয়ে আসল ভেরিয়েবল পরিবর্তন করা (Call by Reference)।
✅ অ্যারে আর পয়েন্টারের সম্পর্ক।

পয়েন্টার C প্রোগ্রামিংয়ের সবচেয়ে পাওয়ারফুল অস্ত্র। এটা আয়ত্ত করলেই তুমি কম্পিউটারের মেমরির রাজা! ভয় পেয়ো না, বারবার প্র্যাকটিস করো। ভুল হবে, এরর দেখবে, কিন্তু প্রতিবার ভুল থেকেই শিখবে।

🎯 পরের আর্টিকেলে: আমরা এক ঝলক দেখবো স্ট্রাকচার (Structure) – কীভাবে আলাদা আলাদা টাইপের ডেটা (যেমন: নাম, বয়স, রোল) একসাথে বেঁধে ছাত্রের রেকর্ড বানানো যায়। ততদিন পর্যন্ত পয়েন্টার নিয়ে খেলা করো!


📢 www.tolearnteam.com – পয়েন্টার নিয়ে কোথায় আটকে গেছো? কমেন্টে ঠিকানা (বাংলায়) লিখে দাও! আমরা তোমার সাহায্য করতে প্রস্তুত। প্রোগ্রামিংয়ের এই যাত্রায় তুমি একা নও, আমরা আছি তোমার পাশে।

All Related Articles (Beginner Level)

  1. প্রোগ্রামিংয়ের জগতে প্রথম পদক্ষেপ: C Programming for Beginners
  2. C প্রোগ্রামিং – দ্বিতীয় অধ্যায়: Array আর String (ডেটার সারি ও শব্দের খেলা)
  3. C প্রোগ্রামিং – তৃতীয় অধ্যায়: ফাংশন (Function) – তোমার নিজস্ব জাদুমন্ত্র তৈরি করো!
  4. C প্রোগ্রামিং – চতুর্থ অধ্যায়: পয়েন্টার (Pointer) – কম্পিউটারের ঠিকানার খেলা!
  5. C প্রোগ্রামিং – পঞ্চম অধ্যায়: স্ট্রাকচার (Structure) – ডেটার ‘সুপারহিরো টিম’ বানাও!
  6. C প্রোগ্রামিং – ষষ্ঠ অধ্যায়: ফাইল হ্যান্ডলিং (File I/O) – ডেটাকে চিরস্থায়ী করো!
  7. সি প্রোগ্রামিং – সপ্তম ও শেষ অধ্যায়: পূর্ণাঙ্গ প্রজেক্ট – ‘ছাত্র মার্কশিট ম্যানেজমেন্ট সিস্টেম’
  8. C প্রোগ্রামিং – শেষ পাতা নয়, নতুন দিগন্ত! (রিক্যাপ ও ক্যারিয়ার রোডম্যাপ)