Avatar ·

¿Qué es la descomposición de array a puntero (array-to-pointer decay) en C++?

¡Hola, colegas! Acabo de empezar a estudiar C++ y me encontré con un comportamiento muy extraño de los arrays. Cuando paso un array a una función e intento obtener su tamaño con `sizeof`, obtengo algo que no espero. Aquí hay un ejemplo: ```cpp #include void printSize(int arr[]) { std::cout << "Dentro de la función: " << sizeof(arr) << " bytes" << std::endl; } int main() { int numbers[5] = {1, 2, 3, 4, 5}; std::cout << "En main: " << sizeof(numbers) << " bytes" << std::endl; // Muestra 20 (5 * 4) printSize(numbers); // Muestra 8 (tamaño de puntero) en sistema de 64 bits return 0; } ``` Esperaba que dentro de la función `sizeof(arr)` también devolviera 20, pero obtengo 8. ¿Por qué sucede esto? He escuchado el término "array decay" (descomposición de array), pero no entiendo del todo qué significa. ¿Cómo afecta esto a la transmisión de arrays a funciones? ¿Y cómo trabajar correctamente con arrays para no perder información sobre su tamaño? Explíquenme, por favor, en detalle y preferiblemente con ejemplos. ¡Gracias de antemano!