C++Intermedio21 oct 2025

¡El `sizeof` que te engaña! Arrays que se hacen pequeños en C++

snippet.c++
#include <iostream>

void processArray(int arr[]) {
    std::cout << "Size inside function: " << sizeof(arr) << " bytes\n";
}

int main() {
    int data[10]; // An array of 10 integers
    std::cout << "Size outside function: " << sizeof(data) << " bytes\n";
    processArray(data);
    return 0;
}

¿Qué crees que imprime?

Salida Esperada

Size outside function: 40 bytes
Size inside function: 40 bytes

⚠️ Salida Real

Size outside function: 40 bytes
Size inside function: 8 bytes

¿Por qué pasa esto?

¡Aquí tenemos un clásico caso de **transformación mágica** cortesía de C++! ✨ Cuando pasas un array de estilo C (como `int data[10]`) a una función usando la sintaxis `int arr[]` o `int* arr`, ¡sorpresa! C++ no pasa el array completo por valor ni por referencia de array. En su lugar, el array **"decae" a un puntero** al primer elemento. 🧙‍♂️ Dentro de la función, `arr` ya no es un array; es solo un `int*`. Por eso, `sizeof(arr)` no te da el tamaño total del array original, sino el **tamaño de un puntero** en tu sistema (típicamente 4 u 8 bytes). Es como darle una foto de tu coche a un amigo y esperar que él sepa el modelo, marca y año solo con eso. ¡Imposible! 🚗➡️📸 Para evitar este truco de magia, pasa el array por **referencia de array** (`int (&arr)[N]`) o, mejor aún, usa `std::vector` o `std::array` de la STL, que son tipos de datos que sí mantienen su tamaño y te dan métodos seguros. ¡No dejes que tus arrays se evaporen!

Conceptos relacionados

array-decaypointerssizeof