মেমরি মডেল এবং সেগমেন্টের উপর নির্ভর করে, পয়েন্টার তিন প্রকারে ভাগ করা হয়:
- নিয়ার পয়েন্টার
- ফার পয়েন্টার
- হিউজ পয়েন্টার
নিয়ার পয়েন্টার
এটি একটি পয়েন্টার যা মেমরির ৬৪KB ডেটা সেগমেন্টের রেঞ্জের মধ্যে কাজ করে।
এটি সেই ডেটা সেগমেন্টের বাইরের অ্যাড্রেস অ্যাক্সেস করতে পারে না।
একটি নিয়ার পয়েন্টার অ্যারিথমেটিক অপারেটর ব্যবহার করে অ্যাড্রেস রেঞ্জ ইনক্রিমেন্ট বা ডিক্রিমেন্ট করা যায়।
near কীওয়ার্ড ব্যবহার করে যেকোনো পয়েন্টারকে নিয়ার পয়েন্টার বানানো যায়।
সিনট্যাক্স
সিনট্যাক্স নিম্নরূপ:
nearnear
নিচের স্টেটমেন্টটি ভেরিয়েবল s-এর জন্য একটি নিয়ার পয়েন্টার ডিক্লেয়ার করে:
char near *string;
প্রোগ্রাম
নিচের প্রোগ্রামটি নিয়ার পয়েন্টারের ব্যবহার দেখায়।
#includeint main(){ int number = 50; int near *p; p = &number; printf("%d", sizeof(p)); return 0; }
আউটপুট
আউটপুট নিম্নরূপ:
2
ফার পয়েন্টার
এটি একটি পয়েন্টার যা অফসেট এবং সেগমেন্ট অ্যাড্রেস দুটোই সংরক্ষণ করে যাতে পয়েন্টার ডিফারেন্সিং করা হয়।
এটি সব ১৬ সেগমেন্ট অ্যাক্সেস করতে পারে।
একটি ফার পয়েন্টার অ্যাড্রেস ০ থেকে ১MB রেঞ্জে থাকে।
পয়েন্টার ইনক্রিমেন্ট বা ডিক্রিমেন্ট হলে শুধু অফসেট অংশ পরিবর্তন হয়।
সিনট্যাক্স
সিনট্যাক্স নিচে দেওয়া হল:
farfar
নিচের স্টেটমেন্টটি ভেরিয়েবল s-এর জন্য একটি ফার পয়েন্টার ডিক্লেয়ার করে:
char far *s;
প্রোগ্রাম
নিচের প্রোগ্রামটি ফার পয়েন্টারের ব্যবহার দেখায়।
#includeint main(){ int number = 50; int far *p; p = &number; printf("%d", sizeof(number)); return 0; }
আউটপুট
আউটপুট নিম্নরূপ:
4
হিউজ পয়েন্টার
এটি একটি পয়েন্টার যা ফার পয়েন্টারের সাথে সাইজের দৃষ্টিতে মিলিত কারণ, দুটোই ৩২-বিট অ্যাড্রেস।
হিউজ পয়েন্টার সেগমেন্ট ওয়ার্কঅরাউন্ড ভোগ করা ছাড়া ইনক্রিমেন্ট করা যায়।
প্রোগ্রাম
নিচের প্রোগ্রামটি হিউজ পয়েন্টারের ব্যবহার দেখায়।
#includeint main(){ char huge *far *ptr; printf("%d%d%d", sizeof(ptr), sizeof(*ptr), sizeof(**ptr)); return 0; }
আউটপুট
আউটপুট নিম্নরূপ:
4 4 1