পয়েন্টার হলো একটি ভেরিয়েবল যা অন্য ভেরিয়েবলের অ্যাড্রেস স্টোর করে।
বিশেষত্ব
পয়েন্টারের বৈশিষ্ট্যগুলো নিচে ব্যাখ্যা করা হলো −
- পয়েন্টার মেমরি স্পেস বাঁচায়।
- মেমরি লোকেশনে ডায়রেক্ট অ্যাক্সেসের কারণে পয়েন্টারের এক্সিকিউশন টাইম দ্রুত।
- পয়েন্টার সাহায্যে মেমরি দক্ষতার সাথে অ্যাক্সেস করা যায়, অর্থাৎ মেমরি ডাইনামিক্যালি অ্যালোকেট ও ডি-অ্যালোকেট করা যায়।
- পয়েন্টার ডেটা স্ট্রাকচারসহ ব্যবহার করা হয়।
পয়েন্টার ঘোষণা, ইনিশিয়ালাইজেশন ও অ্যাক্সেস
নিচের স্টেটমেন্টটি বিবেচনা করুন −
int qty = 179;
মেমরিতে, ভেরিয়েবলটি নিচের মতো রিপ্রেজেন্ট করা যেতে পারে −

পয়েন্টার ঘোষণা
এতে অর্থ 'p' হলো একটি পয়েন্টার ভেরিয়েবল যা অন্য একটি ইন্টিজার ভেরিয়েবলের অ্যাড্রেস ধারণ করে, নিচের স্টেটমেন্টে উল্লেখ করা হলো −
int *p;
পয়েন্টার ইনিশিয়ালাইজেশন
অ্যাড্রেস অপারেটর (&) ব্যবহার করে পয়েন্টার ভেরিয়েবল ইনিশিয়ালাইজ করা হয়।
উদাহরণস্বরূপ −
int qty = 175; int *p; p = &qty;

পয়েন্টারের মাধ্যমে ভেরিয়েবল অ্যাক্সেস
একটি ভেরিয়েবলের মান অ্যাক্সেস করতে, ইন্ডিরেকশন অপারেটর (*) ব্যবহার করা হয়।
উদাহরণস্বরূপ −

এখানে, '*' কে "অ্যাড্রেসের মান" হিসেবে বিবেচনা করা যায়।
দুটি স্টেটমেন্ট নিচের স্টেটমেন্ট দ্বারা সমতুল্য −
p = &qty; n = *p; n = qty
পয়েন্টার ও এক-মাত্রিক অ্যারে
- কম্পাইলার অ্যারেতে সব এলিমেন্টের জন্য liên tục মেমরি লোকেশন অ্যালোকেট করে।
- বেস অ্যাড্রেস = অ্যারেতে প্রথম এলিমেন্টের অ্যাড্রেস (ইন্ডেক্স ০)।
- উদাহরণস্বরূপ − int a[5] = {10, 20, 30, 40, 50};
এলিমেন্টগুলো
পাঁচটি এলিমেন্ট নিচের মতো স্টোর থাকে −

যদি 'p' ইন্টিজার পয়েন্টার হিসেবে ডিক্লেয়ার করা হয়, তবে অ্যারে 'a' নিচের অ্যাসাইনমেন্ট দ্বারা পয়েন্ট করা যায় −
p = a; (অথবা) p = &a[0];
'a'-র প্রতিটি মান p++ ব্যবহার করে একটি এলিমেন্ট থেকে অন্য এলিমেন্টে যেতে পারা যায়। পয়েন্টার ইনক্রিমেন্ট করলে এর মান সেই ডেটা টাইপের সাইজ অনুযায়ী বাড়ে যেটিকে "স্কেল ফ্যাক্টর" বলা হয়।
'p' এবং 'a'-র সম্পর্ক নিচে ব্যাখ্যা করা হলো −
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
একটি এলিমেন্টের অ্যাড্রেস এর ইন্ডেক্স এবং ডেটা টাইপের স্কেল ফ্যাক্টর ব্যবহার করে গণনা করা যায়। এখানে একটি উদাহরণ দেওয়া হলো।
a[3]-এর অ্যাড্রেস = বেস অ্যাড্রেস + (3 * int-এর স্কেল ফ্যাক্টর) = 1000 + (3*4) = 1000 + 12 = 1012
অ্যারে ইন্ডেক্সিং ব্যবহার না করে পয়েন্টার ব্যবহার করে অ্যারে এলিমেন্ট অ্যাক্সেস করা যায়।
*(p+3) a[3]-এর মান দেয়।
a[i] = *(p+i)
উদাহরণ প্রোগ্রাম
পয়েন্টার ও এক-মাত্রিক অ্যারে-এর জন্য C প্রোগ্রাম নিচে দেওয়া হলো −
#includemain ( ){ int a[5]; int *p, i; printf("৫টি এলিমেন্ট লিখুন"); for(i = 0; i < 5; i++) scanf("%d", &a[i]); p = &a[0]; printf("অ্যারেতে এলিমেন্টগুলো"); for(i = 0; i < 5; i++) printf("%d", *(p+i)); }
আউটপুট
উপরোক্ত প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যায় −
৫টি এলিমেন্ট লিখুন: 10 20 30 40 50 অ্যারেতে এলিমেন্টগুলো: 10 20 30 40 50