ما هو تحلل المصفوفة إلى مؤشر (array-to-pointer decay) في C++؟
مرحبًا أيها الزملاء! لقد بدأت للتو في تعلم C++ وواجهت سلوكًا غريبًا جدًا للمصفوفات. عندما أمرر مصفوفة إلى دالة وأحاول معرفة حجمها باستخدام `sizeof`، أحصل على نتيجة غير متوقعة.\n\nهذا مثال:\n\n```cpp\n#include \n\nvoid printSize(int arr[]) {\n std::cout << "داخل الدالة: " << sizeof(arr) << " بايت" << std::endl;\n}\n\nint main() {\n int numbers[5] = {1, 2, 3, 4, 5};\n std::cout << "في main: " << sizeof(numbers) << " بايت" << std::endl; // يطبع 20 (5 * 4)\n printSize(numbers); // يطبع 8 (حجم المؤشر) على نظام 64 بت\n return 0;\n}\n```\n\nكنت أتوقع أن `sizeof(arr)` داخل الدالة سيعيد 20 أيضًا، لكني أحصل على 8. لماذا يحدث هذا؟ لقد سمعت مصطلح "array decay" (تحلل المصفوفة)، لكني لا أفهم تمامًا ما يعنيه.