পয়েন্টার বনাম অ্যারে
একটি পয়েন্টার হল একটি ডেটা টাইপ যা একটি মেমরি অবস্থানের একটি রেফারেন্স ধারণ করে (যেমন একটি পয়েন্টার ভেরিয়েবল একটি মেমরি অবস্থানের ঠিকানা সংরক্ষণ করে যেখানে কিছু ডেটা সংরক্ষণ করা হয়)। অ্যারেগুলি উপাদানগুলির একটি সংগ্রহ সঞ্চয় করার জন্য সর্বাধিক ব্যবহৃত ডেটা কাঠামো। বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ সহজে অ্যারে ঘোষণা করতে এবং অ্যারেতে উপাদান অ্যাক্সেস করার পদ্ধতি প্রদান করে।
পয়েন্টার কি?
একটি পয়েন্টার হল একটি ডেটা টাইপ যা একটি মেমরি অবস্থানের ঠিকানা সংরক্ষণ করে যেখানে কিছু ডেটা সংরক্ষণ করা হয়। অন্য কথায়, একটি পয়েন্টার একটি মেমরি অবস্থানের একটি রেফারেন্স ধারণ করে। পয়েন্টার দ্বারা উল্লেখ করা মেমরি অবস্থানে সংরক্ষিত ডেটা অ্যাক্সেস করাকে ডিরেফারেন্সিং বলা হয়।পুনরাবৃত্ত ক্রিয়াকলাপ যেমন ট্র্যাভার্সিং ট্রি/স্ট্রিং, টেবিল লুকআপ ইত্যাদি করার সময়, পয়েন্টার ব্যবহার করলে কর্মক্ষমতা উন্নত হবে। এর কারণ হল পয়েন্টারকে ডিরেফারেন্সিং এবং কপি করা পয়েন্টার দ্বারা নির্দেশিত ডেটা আসলে কপি এবং অ্যাক্সেস করার চেয়ে সস্তা। একটি নাল পয়েন্টার একটি পয়েন্টার যা কিছু নির্দেশ করে না। জাভাতে, একটি নাল পয়েন্টার অ্যাক্সেস করা একটি ব্যতিক্রম তৈরি করবে যাকে বলা হয় NullPointerException।
একটি অ্যারে কি?
চিত্র 1 এ দেখানো হয়েছে, কোডের একটি অংশ যা সাধারণত একটি অ্যারেতে মান ঘোষণা এবং বরাদ্দ করতে ব্যবহৃত হয়। চিত্র 2 মেমরিতে একটি অ্যারে দেখতে কেমন হবে তা দেখানো হয়েছে৷
int মান[5]; মান[0]=100; মান[1]=101; মান[2]=102; মান[3]=103; মান[4]=104; |
চিত্র 1: একটি অ্যারেতে মান ঘোষণা এবং বরাদ্দ করার জন্য কোড
100 | 101 | 102 | 103 | 104 |
সূচক: 0 | 1 | 2 | 3 | 4 |
চিত্র 2: মেমরিতে সংরক্ষিত অ্যারে
উপরের কোডটি একটি অ্যারেকে সংজ্ঞায়িত করে যা 5 পূর্ণসংখ্যা সঞ্চয় করতে পারে এবং সেগুলি 0 থেকে 4 সূচক ব্যবহার করে অ্যাক্সেস করা হয়। একটি অ্যারের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল, পুরো অ্যারেটি মেমরির একক ব্লক হিসাবে বরাদ্দ করা হয় এবং প্রতিটি উপাদান তার পায় অ্যারেতে নিজস্ব স্থান। একবার একটি অ্যারে সংজ্ঞায়িত করা হলে, এর আকার স্থির করা হয়। সুতরাং আপনি যদি কম্পাইলের সময় অ্যারের আকার সম্পর্কে নিশ্চিত না হন তবে আপনাকে নিরাপদ দিকে থাকার জন্য যথেষ্ট বড় অ্যারে নির্ধারণ করতে হবে। কিন্তু, বেশিরভাগ সময়, আমরা আসলে আমাদের বরাদ্দের চেয়ে কম সংখ্যক উপাদান ব্যবহার করতে যাচ্ছি। তাই একটি উল্লেখযোগ্য পরিমাণ মেমরি আসলে নষ্ট হয়.অন্যদিকে যদি "বড় যথেষ্ট অ্যারে" আসলে যথেষ্ট বড় না হয়, তাহলে প্রোগ্রামটি ক্র্যাশ হয়ে যাবে।
পয়েন্টার এবং অ্যারেগুলির মধ্যে পার্থক্য কী?
একটি পয়েন্টার হল একটি ডেটা টাইপ যা একটি মেমরি অবস্থানের ঠিকানা সংরক্ষণ করে যেখানে কিছু ডেটা সংরক্ষণ করা হয়, যখন অ্যারেগুলি উপাদানগুলির একটি সংগ্রহ সঞ্চয় করার জন্য সর্বাধিক ব্যবহৃত ডেটা কাঠামো। সি প্রোগ্রামিং ভাষায়, পয়েন্টার গাণিতিক ব্যবহার করে অ্যারে সূচীকরণ করা হয় (অর্থাৎ অ্যারের x এর ith উপাদান (x+i) এর সমতুল্য হবে)। তাই সি-তে, পয়েন্টারগুলির সেট যা পরপর মেমরি অবস্থানগুলির একটি সেটকে নির্দেশ করে, একটি অ্যারে হিসাবে চিন্তা করা যেতে পারে। আরও, পয়েন্টার এবং অ্যারেতে অপারেটর কীভাবে কাজ করে তার মধ্যে পার্থক্য রয়েছে। একটি অ্যারেতে প্রয়োগ করা হলে, sizeof অপারেটর অ্যারের সম্পূর্ণ আকার ফিরিয়ে দেবে, যেখানে একটি পয়েন্টারে প্রয়োগ করা হলে, এটি শুধুমাত্র পয়েন্টারের আকার ফিরিয়ে দেবে।