পয়েন্টার এবং অ্যারে: ঘনিষ্ঠ সম্পর্ক
অ্যারের এলিমেন্টগুলো কনটিগুয়াস (সন্নিবিষ্ট) মেমরিতে সংরক্ষিত থাকে। অ্যারের নাম (a) একটি কনস্ট্যান্ট পয়েন্টার যা প্রথম এলিমেন্টের ঠিকানা (&a[0]) নির্দেশ করে।
বেস এড্রেস এবং স্কেল ফ্যাক্টর
যদি int a[5] = {10, 20, 30, 40, 50}; হয় এবং int *p = a; হয়, তবে:
| এক্সপ্রেশন | এড্রেস (উদাহরণ: বেস=1000) | ভ্যালু |
|---|---|---|
| p (या a) | 1000 | 10 |
| p+1 (या a+1) | 1004 | 20 |
| p+2 | 1008 | 30 |
| p+3 | 1012 | 40 |
| p+4 | 1016 | 50 |
ইন্টেজারের সাইজ ৪ বাইট → স্কেল ফ্যাক্টর = ৪। p+i এড্রেস বেড়ায় i * sizeof(int) বাইট।
পয়েন্টার দিয়ে অ্যারে এক্সেস
a[i] ↔ *(a + i) ↔ *(p + i) ↔ p[i]
সব সমতুল্য।
এড্রেস ক্যালকুলেশন ফর্মুলা
Address of a[i] = base_address + (i * scale_factor)
উদাহরণ: a[3] এর এড্রেস = 1000 + (3 × 4) = 1012।
উদাহরণ প্রোগ্রাম
#include <stdio.h>
int main() {
int a[5];
int *p;
int i;
printf("Enter 5 elements: ");
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
p = a; // বা &a[0]
printf("Array elements via pointer: ");
for (i = 0; i < 5; i++)
printf("%d ", *(p + i));
return 0;
}
আউটপুট
Enter 5 elements: 10 20 30 40 50 Array elements via pointer: 10 20 30 40 50
মहত্বপূর্ণ পার্থক্য
aকনস্ট্যান্ট পয়েন্টার (ল-ভ্যালু নয়,a++অবৈধ)।pভেরিয়েবল পয়েন্টার (p++বৈধ)।sizeof(a)= পুরো অ্যারের সাইজ (২০ বাইট)।sizeof(p)= পয়েন্টার সাইজ (৪/৮ বাইট)।