সি/সি++ প্রোগ্রামিং টিউটোরিয়াল (পর্ব ১৪) পয়েন্টারের মান নির্ধারণ

0
279

ডিক্লেয়ার করার পর পয়েন্টারের মান নিজে থেকে নির্ধারিত হয় না। অর্থাৎ পয়েন্টার নিজে থেকে অন্য কোনো ভেরিয়েবলকে বা অ্যাড্রেসকে পয়েন্ট করতে পারে না। এক্ষেত্রে প্রোগ্রামারকেই বলে দিতে হয় যে পয়েন্টারটি কাকে পয়েন্ট করবে। অর্থাৎ পয়েন্টারের মান অ্যাসাইন করে দিতে হবে। পয়েন্টারের মান অ্যাসাইন করার নিয়ম সাধারণ ভেরিয়েবলের মতোই, তবে এখানে্ অপারেটর ব্যবহার করতে হয়। যেমন : int x=10, &y; y=&x; এ দুটি লাইনের প্রথমে ইন্টিজার টাইপের একটি ভেরিয়েবল এবং একটি পয়েন্টার ডিক্লেয়ার করা হয়েছে। ভেরিয়েবলটি ডিক্লেয়ার করার সময় আবার মান অ্যাসাইন করে দেয়া হয়েছে।

দ্বিতীয় লাইনে পয়েন্টারের মান অ্যাসাইন করা হয়েছে। আমরা জানি্ অপারেটর সাধারণত অ্যাড্রেসের জন্য ব্যবহার হয়। তাই কোনো ভেরিয়েবলের অ্যাড্রেস বোঝাতে হলে তার আগে্ অপারেটর ব্যবহার করতে হবে। তাই দ্বিতীয় লাইনেু-এর মান হিসেবে x অর্থাৎ x-এর অ্যাড্রেস নির্ধারণ করা হয়েছে। সুতরাং x হলো একটি ইন্টিজার এবং হলো x-এর পয়েন্টার। অন্যভাবে বলা যায়ী-এর মান হলো ১০, x-এর অ্যাড্রেস হলো fff4, y -এর মান হলো fff4, y -এর অ্যাড্রেস হলে ৯০০১য। এখানে অ্যাড্রেসগুলো কল্পনা করা হয়েছে। চিত্রে বিষয়টি তুলে ধরার চেষ্টা করা হলো।

মান নির্ধারণের সময় কয়েকটি বিষয় লক্ষ করতে হবে। সাধারণ ভেরিয়েবলের মতো পয়েন্টার ভেরিয়েবলেরও ডিক্লেয়ার করার সময় মান নির্ধারণ করা যায়। যেমন : int x,*y=&x; তবে এক্ষেত্রে উল্লেখ্য, এভাবে পয়েন্টারের মান নির্ধারণ করার সময় পয়েন্টার অন্য যে ভেরিয়েবলকে পয়েন্ট করবে (অর্থাৎ যার অ্যাড্রেস পয়েন্টারের মাঝে থাকবে), তাকে অবশ্যই আগে ডিক্লেয়ার করতে হবে। সুতরাং int *y=&x,x; এভাবে লিখলে এরর দেখাবে। কারণ আমরা জানি, প্রোগ্রাম একটার পর একটা কমান্ড এক্সিকিউট করে। তাই প্রোগ্রাম যখনু-এর মান অ্যাসাইন করবে তখন দেখবেী নামে কোনো ভেরিয়েবল নেই।

কারণ x-কে পরে ডিক্লেয়ার করা হয়েছে। তাই কম্পাইলার এখানে এরর দেখাবে। পয়েন্টার ভেরিয়েবলের মান নির্ধারণের সময় এর ডাটা টাইপের দিকে খেয়াল রাখতে হয়। এক ডাটা টাইপের পয়েন্টার অন্য ডাটা টাইপের ভেরিয়েবলকে পয়েন্ট করতে পারে না। তাই পয়েন্টার এবং পয়েন্টেড ভেরিয়েবলের ডাটা টাইপ অবশ্যই এক হতে হবে। যেমন : int x; float *y=&x; এখানে কম্পাইলার এরর দেখাবে, কারণ ভেরিয়েবল দুটির ডাটা টাইপ এক নয়। তবে পয়েন্টারের মান নির্ধারণ করার ডাটা কাস্ট করা সম্ভব। যেমন : int x; char *y=(char*) &x; এখানে যদিও x এবং-এর ডাটা টাইপ ভিন্ন, কিন্তু x -এর মান নির্ধারণ করার সময় ডাটা কাস্ট করা হয়েছে।

অর্থাৎ x -এর অ্যাড্রেস ক্যারেক্টার হিসেবেু থাকবে। ডাটা কাস্ট করে পয়েন্টারের মান নির্ধারণ করলে খেয়াল রাখতে হবে যে ডাটা টাইপ কাস্ট করা হচ্ছে। তারপর অবশ্যই যেনো * সাইন দেয়া হয়। কিন্তু নিতান্ত নিরুপায় না হলে এ ধরনের ডাটা কাস্ট করে পয়েন্টারের মান নির্ধারণ করা ঠিক নয়। কারণ পয়েন্টারের জন্য এ ধরনের মান নির্ধারণ কম্পাইলার সমর্থন করে না। তাই এখানে ওয়ার্নিং দেখাতে পারে এবং কখনো কখনো ঝামেলা করতে পারে। পয়েন্টারের মান সাধারণত অপারেটরের সাহায্য ছাড়া নির্ধারণ করা যায় না। যেমন : int x; int *y=fff4; এখানে যদি x-এর অ্যাড্রেস fff4, y হয়, তাহলেু-এর মান সরাসরি এভাবে অ্যাসাইন করা যাবে না, এরর দেখাবে।

পয়েন্টার সি ল্যাঙ্গুয়েজে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। পয়েন্টার ছাড়া অন্য কোনোভাবে সি-তে অ্যাড্রেস নিয়ে কাজ করা সম্ভব নয়। বড় বড় প্রোগ্রাম বানাতে হলে অনেক সময়ই অ্যাড্রেস নিয়ে কাজ করতে হয়। আবার অনেক ধরনের ডাটা স্ট্রাকচার আছে, যেগুলো পয়েন্টারের ধারণার ওপর গঠিত। তাই পয়েন্টারের ব্যবহার ভালোভাবে শেখা খুব গুরুত্বপূর্ণ

একটি উত্তর ত্যাগ