কম্পিউটার

C++ এ অ্যারে ক্ষয় কি? এটা কিভাবে প্রতিরোধ করা যেতে পারে?


এখানে আমরা Array Decay কি তা দেখব। একটি অ্যারের ধরণ এবং মাত্রা হারানোকে অ্যারে ক্ষয় বলা হয়। এটি ঘটে যখন আমরা পয়েন্টার বা মান দ্বারা একটি ফাংশনে অ্যারে পাস করি। প্রথম ঠিকানাটি অ্যারেতে পাঠানো হয় যা একটি পয়েন্টার। সেই কারণে, অ্যারের আকারটি আসল নয়৷

আসুন C++ কোড ব্যবহার করে অ্যারে ক্ষয়ের একটি উদাহরণ দেখি,

উদাহরণ

#include<iostream>
using namespace std;
void DisplayValue(int *p) {
   cout << "New size of array by passing the value : ";
   cout << sizeof(p) << endl;
}
void DisplayPointer(int (*p)[10]) {
   cout << "New size of array by passing the pointer : ";
   cout << sizeof(p) << endl;
}
int main() {
   int arr[10] = {1, 2, };
   cout << "Actual size of array is : ";
   cout << sizeof(arr) <<endl;
   DisplayValue(arr);
   DisplayPointer(&arr);
}

আউটপুট

Actual size of array is : 40
New size of array by passing the value : 8
New size of array by passing the pointer : 8

এখন, আমরা দেখব কিভাবে C++ এ অ্যারের ক্ষয় প্রতিরোধ করা যায়। অ্যারে ক্ষয় রোধ করার জন্য দুটি নিম্নলিখিত উপায় রয়েছে৷

  • অ্যারের ক্ষয় একটি প্যারামিটার হিসাবে অ্যারের আকার পাস করে প্রতিরোধ করা হয় এবং অ্যারের প্যারামিটারে sizeof() ব্যবহার করবেন না।
  • রেফারেন্স দ্বারা ফাংশনে অ্যারে পাস করুন। এটি অ্যারেকে পয়েন্টারে রূপান্তর করতে বাধা দেয় এবং এটি অ্যারের ক্ষয় রোধ করে।

উদাহরণ

#include<iostream>
using namespace std;
void Display(int (&p)[10]) {
   cout << "New size of array by passing reference: ";
   cout << sizeof(p) << endl;
}
int main() {
   int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   cout << "Actual size of array is: ";
   cout << sizeof(arr) <<endl;
   Display(arr);
}

আউটপুট

Actual size of array is: 40
New size of array by passing reference: 40

  1. n আকারের প্রদত্ত অ্যারে চেক করুন n স্তরের BST প্রতিনিধিত্ব করতে পারে বা C++ এ নয়

  2. C/C++ এ একটি নাল-টার্মিনেটেড স্ট্রিং কি?

  3. কিভাবে আমি C++ ব্যবহার করে কনসোল সাফ করতে পারি?

  4. ফার্মিং কী এবং কীভাবে এটি প্রতিরোধ করা যায়?