🎯 এই পর্বে যা জানবে:
- পয়েন্টার কী
- পয়েন্টার কেন ব্যবহার করা হয়
- পয়েন্টারের ঘোষণা, ইনিশিয়ালাইজেশন ও ব্যবহার
- অ্যাড্রেস অপারেটর (&) ও ডেরেফারেন্স অপারেটর (*)
- পয়েন্টার ও অ্যারের সম্পর্ক
- ফাংশনে পয়েন্টারের ব্যবহার
🧩 পয়েন্টার কী?
পয়েন্টার (Pointer) হলো এমন একটি ভেরিয়েবল যা অন্য ভেরিয়েবলের মেমোরি অ্যাড্রেস (address) সংরক্ষণ করে।
অর্থাৎ, এটি মূল মানটি না রেখে মানটি যেখানে রাখা হয়েছে সেই ঠিকানা ধরে রাখে।
👉 সহজভাবে বললে —
পয়েন্টার হলো ভেরিয়েবলের ঠিকানার ধারক।
💡 উদাহরণ:
#include <stdio.h>
int main() {
int x = 10;
int *p;
p = &x;
printf("x এর মান: %d\n", x);
printf("x এর ঠিকানা: %p\n", &x);
printf("p এর মান (x এর ঠিকানা): %p\n", p);
printf("p থেকে x এর মান: %d\n", *p);
return 0;
}আউটপুট:
x এর মান: 10
x এর ঠিকানা: 0x7ffee1a8c4ac
p এর মান (x এর ঠিকানা): 0x7ffee1a8c4ac
p থেকে x এর মান: 10⚙️ পয়েন্টার ঘোষণা ও ইনিশিয়ালাইজেশন
data_type *pointer_name;উদাহরণ:
int *ptr;
float *fptr;
char *cptr;এরপর ভেরিয়েবলের ঠিকানা দিয়ে ইনিশিয়ালাইজ করা হয় 👇
int x = 5;
int *ptr = &x;🧭 গুরুত্বপূর্ণ অপারেটর
🔹 Address-of Operator (&)
কোনো ভেরিয়েবলের মেমোরি ঠিকানা বের করতে & ব্যবহার করা হয়।
👉 উদাহরণ: &x
🔹 Dereference Operator (*)
পয়েন্টারের মাধ্যমে ভেরিয়েবলের মান বের করতে * ব্যবহার করা হয়।
👉 উদাহরণ: *p
🧮 পয়েন্টার ও অ্যারে
অ্যারে ও পয়েন্টার একে অপরের সাথে গভীরভাবে সম্পর্কিত।
অ্যারের নাম নিজেই প্রথম উপাদানের ঠিকানাকে নির্দেশ করে।
#include <stdio.h>
int main() {
int arr[3] = {10, 20, 30};
int *p = arr;
printf("%d\n", *p); // 10
printf("%d\n", *(p+1)); // 20
printf("%d\n", *(p+2)); // 30
return 0;
}🔁 পয়েন্টার টু পয়েন্টার
একটি পয়েন্টারের ঠিকানাকে অন্য একটি পয়েন্টারে সংরক্ষণ করা যায়।
একে বলে Pointer to Pointer।
#include <stdio.h>
int main() {
int x = 100;
int *p = &x;
int **pp = &p;
printf("x এর মান: %d\n", **pp);
return 0;
}আউটপুট:
x এর মান: 100🔄 ফাংশনে পয়েন্টারের ব্যবহার
পয়েন্টারের মাধ্যমে call by reference করা যায়, অর্থাৎ ফাংশনের ভিতরে মান পরিবর্তন করলে মূল ভেরিয়েবলেও পরিবর্তন হয়।
💡 উদাহরণ:
#include <stdio.h>
void changeValue(int *n) {
*n = 50;
}
int main() {
int num = 10;
printf("আগে num = %d\n", num);
changeValue(&num);
printf("পরে num = %d\n", num);
return 0;
}আউটপুট:
আগে num = 10
পরে num = 50🧠 পয়েন্টার ব্যবহারের সুবিধা
✅ ফাংশনে মান পরিবর্তন সহজ
✅ অ্যারে ও স্ট্রিং প্রক্রিয়াকরণে কার্যকর
✅ মেমোরি দক্ষতা বৃদ্ধি করে
✅ ডাইনামিক মেমোরি ব্যবস্থাপনায় অপরিহার্য
⚠️ সতর্কতা
❌ পয়েন্টার ঘোষণা করে ইনিশিয়ালাইজ না করলে এটি garbage value ধারণ করে
❌ ভুলভাবে ব্যবহার করলে Segmentation fault হতে পারে
✅ সবসময় সঠিক মেমোরি অ্যাড্রেস দিয়ে কাজ করা উচিত
✨ সংক্ষেপে
- পয়েন্টার অন্য ভেরিয়েবলের ঠিকানা ধরে রাখে
&দিয়ে ঠিকানা পাওয়া যায়,*দিয়ে মান অ্যাক্সেস করা যায়- অ্যারে ও ফাংশনে পয়েন্টার খুবই গুরুত্বপূর্ণ
- call by reference করতে পয়েন্টার ব্যবহার করা হয়
- Pointer-to-pointer আরও গভীর অ্যাক্সেস দেয়



