সি – পয়েন্টার . C Pointers

সি - পয়েন্টার
নয়ন চন্দ্র দত্ত

সি পয়েন্টার শিখতে সহজ এবং মজা। কিছু সি প্রোগ্রামিং টাস্ক, পয়েন্টার দিয়ে আরো সহজে করা যায় এবং অন্যান্য টাস্ক যেমন ডাইনামিক মেমরি বরাদ্দ হিসাব এ, পয়েন্টার ব্যবহার না করে সম্পাদনা করা যাবে না।
সুতরাং একজন নিখুঁত সি প্রোগ্রামার হতে হলে পয়েন্টার জানা প্রয়োজন। তাহলে চলুন সহজ এবং সহজ ধাপে ধাপে তাদের শেখা শুরু করা যাক।
আপনি জানেন, প্রতি ভেরিয়েবল একটি মেমরি অবস্থান বুঝায় এবং প্রতি মেমোরি তার ঠিকানা নির্ধারিত রয়েছে যা এম্পারসেন্ড(&) অপারেটর দিয়ে ব্যবহার করে ব্যবহার করা যেতে পারে, যা যা মেমরির মধ্যে একটি ঠিকানা উল্লেখ করে।

নিম্নলিখিত উদাহরণ বিবেচনা করুন যা সংজ্ঞায়িত ভেরিয়েবল ঠিকানা মুদ্রণ করবেঃ

#include <stdio.h>

int main ()
{
int var1;
char var2[10];

printf("Address of var1 variable: %x\n", &var1 );
printf("Address of var2 variable: %x\n", &var2 );

return 0;
}

যখন উপরের কোড কম্পাইল এবং নির্বাহ করে তখন এর রিজাল্ট কিছুটা নিচের মত হয়ঃ

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

আশা করছি উপরের ধারণার উপর ভিত্তি করে আপনারা মেমরি ঠিকানা এবং কিভাবে এটি অ্যাক্সেস করে এটা বুঝতে পেরেছেন। চলুন এখন আমরা দেখব পয়েন্টার কি?

পয়েন্টার কি
একটি পয়েন্টার ভেরিয়েবল যার মান হল অন্য ভেরিয়েবল এর ঠিকানা, যেমন- মেমরি অবস্থানের সরাসরি ঠিকানা। কোনো ভেরিয়েবল বা ধ্রুবক মত, কোন ভেরিয়েবল ঠিকানা সংরক্ষণ এ এটি ব্যবহার করার পূর্বে
একটি পয়েন্টার ডিক্লেয়ার করতে হবে।
একটি পয়েন্টার ভেরিয়েবল এর সাধারণ ফর্ম নিম্নরূপঃ

type *var-name;

এখানে type হচ্ছে পয়েন্টার এর বেস টাইপ। এটি একটি বৈধ সি ডাটা টাইপ হতে হবে এবং পয়েন্টার ভেরিয়েবল এর নাম হবে var-name। তারকা চিহ্ন * একটি পয়েন্টার ডিকলার করতে হয় যে একই তারকা আপনি গুণ জন্য ব্যবহার করেন।
যাইহোক, এই বিবৃতিতে তারকা চিহ্ন একটি পয়েন্টার হিসাবে একটি ভেরিয়েবল নামকরণ করার জন্য ব্যবহার করা হচ্ছে।

কিছু বৈধ পয়েন্টার নিম্নরূপঃ

int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */

কিভাবে পয়েন্টার ব্যবহার করতে হবে?
কয়েকটি গুরুত্বপূর্ণ অপারেশন আছে যা আমরা খুব সহজে পয়েন্টারের সাহায্যে করতে পারি।
(ক) আমরা একটি পয়েন্টার ভেরিয়েবল নির্ধারণ করতে পারি
(খ) একটি পয়েন্টারকে একটি ভেরিয়েবল এর ঠিকানার দায়িত্ব অর্পণ করা এবং
(গ) অবশেষে পয়েন্টার ভেরিয়েবল এর ঠিকানা এ উপলব্ধ মান অ্যাক্সেস করা
এটি ইউনারী অপারেটর * দিয়ে করা হয় যা তার ওপারেন্ড দ্বারা নির্দিষ্ট ঠিকানায় অবস্থিত ভেরিয়েবল প্রদান করে থাকে। নিম্নলিখিত উদাহরণে এই অপারেশন ব্যবহার আছেঃ

#include <stdio.h>

int main ()
{
int var = 20; /* actual variable declaration */
int *ip; /* pointer variable declaration */

ip = &var; /* store address of var in pointer variable*/

printf("Address of var variable: %x\n", &var );

/* address stored in pointer variable */
printf("Address stored in ip variable: %x\n", ip );

/* access the value using the pointer */
printf("Value of *ip variable: %d\n", *ip );

return 0;
}

যখন উপরের কোড কম্পাইল এবং নির্বাহ করে তখন এর রিজাল্ট কিছুটা নিচের মত হয়ঃ

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

সি নাল পয়েন্টার
নিয়োগ করার মত সঠিক ঠিকানা যদি না থাকে সেক্ষেত্রে একটি পয়েন্টার ভেরিয়েবল এর একটি শূন্য মান নির্ধারণ সবসময় একটি ভাল অভ্যাস। এটি ভেরিয়েবল ঘোষণা সময় সম্পন্ন করা হয়। একটি পয়েন্টার যা শূন্য
নির্ধারিত তাকে নাল পয়েন্টার বলা হয়।
বিভিন্ন স্ট্যান্ডার্ড লাইব্রেরিতে সংজ্ঞায়িত শূন্য পয়েন্টার হচ্ছে একটি শূন্য মানের সঙ্গে একটি ধ্রুবক। নিচের উদাহরণটি দেখুনঃ

#include <stdio.h>

int main ()
{
int *ptr = NULL;

printf("The value of ptr is : %x\n", ptr );

return 0;
}

যখন উপরের কোড কম্পাইল এবং নির্বাহ করে তখন এর রিজাল্ট কিছুটা নিচের মত হয়ঃ

The value of ptr is 0

অধিকাংশ অপারেটিং সিস্টেমে প্রোগ্রাম ঠিকানা 0 এ মেমরি অ্যাক্সেস করার অনুমতি নেই, কারণ সেই মেমরি অপারেটিং সিস্টেম দ্বারা সংরক্ষিত। তবে, মেমরি ঠিকানা 0 এর বিশেষ তাৎপর্য রয়েছে।
এটা ইঙ্গিত দেয় যে, পয়েন্টার অ্যাক্সেসযোগ্য মেমরির অবস্থান নির্দেশ করার উদ্দেশ্যে নয়। কিন্তু কনভেনশন দ্বারা, একটি নাল পয়েন্টারের উপস্থিত (শূন্য) মান থাকে, তাহলে এটা কিছুই নির্দেশ যোগ্য হয়না।
নাল পয়েন্টার পরীক্ষা করার জন্য আপনি নিচের বিবৃতি অনুসরণ করতে পারেনঃ

if(ptr) /* succeeds if p is not null */
if(!ptr) /* succeeds if p is null */

বিস্তারিত সি পয়েন্টার
পয়েন্টার অনেক কিন্তু সহজ ধারণা এবং তারা C প্রোগ্রামিং এর জন্য খুবই গুরুত্বপূর্ণ। নিম্নলিখিত কয়েকটি গুরুত্বপূর্ণ পয়েন্টার ধারণা আছে যা একজন সি প্রোগ্রামারকে স্পষ্ট হতে হবেঃ

ধারণাঃ C - Pointer arithmetic
ব্যাখ্যাঃ চারটি গাণিতিক অপারেটর আছে যা পয়েন্টারে ব্যবহার করা যেতে পারেঃ ++, --, +, - ।

ধারণাঃ C - Array of pointers
ব্যাখ্যাঃ পয়েন্টারের একটি সংখ্যা ধরে রাখতে আপনি অ্যারে নির্ধারণ করতে পারবেন।

ধারণাঃ C - Pointer to pointer
ব্যাখ্যাঃ সি আপনাকে একটি পয়েন্টার এ পয়েন্টার করতে সক্ষম করবে।

ধারণাঃ Passing pointers to functions in C
ব্যাখ্যাঃ রেফারেন্স দ্বারা বা ঠিকানা দ্বারা একটি যুক্তি পাসিং উভয় পাশ যুক্তি নামক ফাংশন দ্বারা কলিং ফাংশন পরিবর্তন করা সম্ভব।

ধারণাঃ Return pointer from functions in C
ব্যাখ্যাঃ সি তে একটি ফাংশন হিসাবে ভাল স্থানীয় পরিবর্তনশীল, স্ট্যাটিক পরিবর্তনশীল এবং পরিবর্তনশীল বরাদ্দ মেমরির একটি পয়েন্টার প্রত্যাবর্তন করতে পারবেন।

Permanent link to this article: http://bangla.sitestree.com/%e0%a6%b8%e0%a6%bf-%e0%a6%aa%e0%a6%af%e0%a6%bc%e0%a7%87%e0%a6%a8%e0%a7%8d%e0%a6%9f%e0%a6%be%e0%a6%b0-c-pointers/