পয়েন্টার হল একটি ভেরিয়েবল যা অন্য ভেরিয়েবলের ঠিকানা সংরক্ষণ করে।
বৈশিষ্ট্যসমূহ
পয়েন্টারের বৈশিষ্ট্যগুলি নীচে ব্যাখ্যা করা হয়েছে -
- পয়েন্টার মেমরির স্থান সংরক্ষণ করে।
- মেমরি অবস্থানে সরাসরি অ্যাক্সেসের কারণে পয়েন্টার কার্যকর করার সময় দ্রুত হয়।
- পয়েন্টারের সাহায্যে, মেমরিটি দক্ষতার সাথে অ্যাক্সেস করা হয়, অর্থাৎ, মেমরি বরাদ্দ করা হয় এবং গতিশীলভাবে ডিললোকেট করা হয়।
- ডাটা স্ট্রাকচারের সাথে পয়েন্টার ব্যবহার করা হয়।
পয়েন্টার ঘোষণা, আরম্ভ এবং অ্যাক্সেস
নিম্নলিখিত বিবৃতিটি বিবেচনা করুন -
int qty = 179;
মেমরিতে, ভেরিয়েবলকে নিম্নরূপ উপস্থাপন করা যেতে পারে −
পয়েন্টার ঘোষণা করা হচ্ছে
এর অর্থ হল 'p' হল একটি পয়েন্টার ভেরিয়েবল যা অন্য পূর্ণসংখ্যা ভেরিয়েবলের ঠিকানা ধারণ করে, যেমনটি নীচের বিবৃতিতে উল্লেখ করা হয়েছে −
Int *p;
পয়েন্টারের সূচনা
ঠিকানা অপারেটর (&) একটি পয়েন্টার ভেরিয়েবল শুরু করতে ব্যবহৃত হয়।
যেমন −
int qty = 175; int *p; p= &qty;
পয়েন্টারের মাধ্যমে একটি ভেরিয়েবল অ্যাক্সেস করা
একটি ভেরিয়েবলের মান অ্যাক্সেস করতে, ইনডাইরেকশন অপারেটর (*) ব্যবহার করা হয়।
যেমন −
এখানে, '*' ঠিকানায় মান হিসাবে গণ্য করা যেতে পারে।
নিম্নলিখিত বিবৃতি -
দ্বারা দুটি বিবৃতি সমতুল্যp = &qty; n = *p; n =qty
পয়েন্টার এবং এক-মাত্রিক অ্যারে
- কম্পাইলার অ্যারের সমস্ত উপাদানের জন্য অবিচ্ছিন্ন মেমরি অবস্থান বরাদ্দ করে৷
- বেস ঠিকানা =অ্যারের প্রথম উপাদান ঠিকানা (সূচী 0)।
- উদাহরণস্বরূপ − int a [5] ={10, 20,30,40,50};
উপাদান
পাঁচটি উপাদান নিম্নরূপ −
সংরক্ষণ করা হয়
-
যদি 'p' কে পূর্ণসংখ্যা পয়েন্টার হিসাবে ঘোষণা করা হয়, তাহলে, একটি অ্যারে 'a' নিম্নলিখিত অ্যাসাইনমেন্ট দ্বারা নির্দেশ করা যেতে পারে -
p = a; (or) p = &a[0];
-
একটি উপাদান থেকে অন্য উপাদানে যাওয়ার জন্য p++ ব্যবহার করে 'a'-এর প্রতিটি মান অ্যাক্সেস করা হয়। যখন একটি পয়েন্টার বৃদ্ধি করা হয়, তখন এটির মান ডেটাটাইপের আকার দ্বারা বৃদ্ধি করা হয় যা এটি নির্দেশ করে। এই দৈর্ঘ্যকে "স্কেল ফ্যাক্টর" বলা হয়।
-
'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
-
একটি উপাদানের ঠিকানা তার সূচক এবং ডেটাটাইপের স্কেল ফ্যাক্টর ব্যবহার করে গণনা করা হয়। এটি ব্যাখ্যা করার জন্য একটি উদাহরণ এখানে দেওয়া হল৷
৷
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
-
পয়েন্টারগুলি অ্যারে ইন্ডেক্সিং ব্যবহার করার পরিবর্তে অ্যারে উপাদানগুলি অ্যাক্সেস করতে ব্যবহার করা যেতে পারে৷
-
*(p+3) a[3] এর মান দেয়।
a[i] = *(p+i)
উদাহরণ প্রোগ্রাম
পয়েন্টার এবং ওয়ান-ডাইমেনশনাল অ্যারে -
এর জন্য সি প্রোগ্রামটি নিচে দেওয়া হল#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50