ডাবল পয়েন্টার বা পয়েন্টার টু পয়েন্টার হল একটি ভেরিয়েবল যা অন্য একটি পয়েন্টারের ঠিকানা ধারণ করে।
পয়েন্টার টু পয়েন্টারের ডিক্লেয়ারেশন নিম্নরূপ:
datatype **pointer_name;
উদাহরণস্বরূপ, int **p; p হল পয়েন্টার টু পয়েন্টার।
ইনিশিয়ালাইজেশন - '&' ইনিশিয়ালাইজেশনের জন্য ব্যবহৃত হয়।
উদাহরণস্বরূপ,
int a = 10; int *p; int **q; p = &a;
এক্সেসিং - ইন্ডিরেকশন অপারেটর (*) অ্যাক্সেসের জন্য ব্যবহৃত হয়।
উদাহরণ
পয়েন্টার টু পয়েন্টারের জন্য C প্রোগ্রাম নিচে দেওয়া হল:
#includemain(){ int A = 10; int *p; int **q; p = &A; q = &p; printf("A = %d", A); printf("পয়েন্টারের মাধ্যমে A এর মান = %d", *p); printf("ডাবল পয়েন্টারের মাধ্যমে A এর মান = %d", **q); }
আউটপুট
উপরের প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যাবে:
A = 10 পয়েন্টারের মাধ্যমে A এর মান = 10 ডাবল পয়েন্টারের মাধ্যমে A এর মান = 10
ভয়েড পয়েন্টার
এটি একটি ধরণের পয়েন্টার যা যেকোনো ডেটা টাইপের ভেরিয়েবলের ঠিকানা ধারণ করতে পারে (অথবা) যেকোনো ডেটা টাইপের ভেরিয়েবলে পয়েন্ট করতে পারে।
ভয়েড পয়েন্টারের ডিক্লেয়ারেশন নিম্নরূপ:
void *pointername;
উদাহরণস্বরূপ, void *vp;
এক্সেসিং - টাইপ কাস্ট অপারেটর ব্যবহার করে ভেরিয়েবলের মান তার পয়েন্টার দিয়ে অ্যাক্সেস করা হয়।
সিনট্যাক্স নিম্নরূপ:
*((type cast) void pointer)
উদাহরণস্বরূপ,
int i = 10; void *vp; vp = &i; printf("%d", *((int*)vp)); // টাইপ কাস্টউদাহরণ
ভয়েড পয়েন্টারের জন্য C প্রোগ্রাম নিচে দেওয়া হল:
#includemain(){ int i = 10; float f = 5.34; void *vp; clrscr(); vp = &i; printf("i = %d", *((int*)vp)); vp = &f; printf("f = %f", *((float*)vp)); getch(); }
আউটপুট
উপরের প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফল পাওয়া যাবে:
i = 10 f = 5.34