কম্পিউটার টিউটোরিয়াল

C/C++-এ অ্যারে ডিকে (Array Decay) কী?

অ্যারে পয়েন্টারের সাথে অনেক মিলে যেছে, কিন্তু sizeof অপারেটর তাদের আলাদা করে। অ্যারে পয়েন্টারে কনভার্ট হলে (ফাংশন আর্গুমেন্টে পাস করলে বা পয়েন্টার ভেরিয়েবলে অ্যাসাইন করলে) sizeof অ্যারের আকার না দিয়ে পয়েন্টারের আকার দেয়। এটিকে Array Decay বলা হয়।

উদাহরণ

#include <iostream>

int main() {
    const int a[] = {2, 3, 5, 7, 11};
    const int* p = a; // Array decays to pointer
    std::cout << (sizeof(p) != sizeof(a)) << std::endl; // 1 (true)
}

আউটপুট

1

sizeof(a) = ২০ বাইট (৫ × ৪), sizeof(p) = ৮ বাইট (৬৪-বিট সিস্টেমে পয়েন্টার সাইজ)।

কেন গুরুত্বপূর্ণ?

  • ফাংশনে অ্যারে পাস করলে সাইজ তথ্য হারায়।
  • র‍্যাঞ্জ-ভিত্তিক for (for(auto x : arr)) কাজ করে না (পয়েন্টার হয়ে যাওয়ার কারণে)।

সমাধান

  • std::array<T, N> (C++11) - ফিক্সড সাইজ, decay না করে
  • std::vector<T> - ডাইনামিক সাইজ
  • std::span<T> (C++20) - নন-ওয়ানিং ভিউ
  • সাইজ আলাদা প্যারামিটার হিসেবে পাস করা
  1. C++-এ sizeof অপারেটর কী?

  2. লিনাক্সে C++-এর জন্য সেরা IDE কী?

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  4. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)