অ্যারে অফ পয়েন্টার (Array of Pointers)
সাধারণ অ্যারের মতো, পয়েন্টারও অ্যারে হিসেবে ঘোষণা করা যায়।
ঘোষণা
datatype *ptr_name[size];
উদাহরণ: int *p[5]; — ৫টি ইন্টেজার পয়েন্টার ধারণ করতে পারে।
ইনিশিয়ালাইজেশন
int a[3] = {10, 20, 30};
int *p[3];
for (int i = 0; i < 3; i++)
p[i] = &a[i]; // অথবা p[i] = a + i;
এক্সেস
for (int i = 0; i < 3; i++)
printf("%d ", *p[i]); // 10 20 30
উদাহরণ প্রোগ্রাম
#include <stdio.h>
int main() {
int a[3] = {10, 20, 30};
int *p[3];
for (int i = 0; i < 3; i++)
p[i] = &a[i];
printf("Array elements via pointers: ");
for (int i = 0; i < 3; i++)
printf("%d ", *p[i]);
return 0;
}
আউটপুট
Array elements via pointers: 10 20 30
পয়েন্টার টু পয়েন্টার (Pointer to Pointer)
একটি পয়েন্টার যা অন্য পয়েন্টারের ঠিকানা ধারণ করে। ডবল ইন্ডিরেকশন (double indirection)।
ঘোষণা
datatype **ptr_name;
উদাহরণ: int **p;
ইনিশিয়ালাইজেশন
int a = 10;
int *p = &a;
int **q = &p;
এক্সেস
*p→ a-এর ভ্যালু (10)**q→ a-এর ভ্যালু (10)
উদাহরণ প্রোগ্রাম
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
int **q = &p;
printf("a = %d\n", a);
printf("*p = %d\n", *p);
printf("**q = %d\n", **q);
return 0;
}
আউটপুট
a = 10 *p = 10 **q = 10
পয়েন্টার টু পয়েন্টারের ব্যবহার
- ফাংশনে পয়েন্টার আর্গুমেন্ট পাস করলে যাতে কলার পয়েন্টার পরিবর্তন করা যায় (যেমন লিংকড লিস্ট হেড আপডেট)।
- ২D অ্যারে ডাইনামিক্যালি অ্যালোকেট করার সময়।
- কমান্ড লাইন আর্গুমেন্ট:
char **argv।