¿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!
No answers yet.
Inicia sesión para dejar una respuesta
Blogs