Avatar ·

O que é array-to-pointer decay em C++?

Olá, colegas! Acabei de começar a estudar C++ e me deparei com um comportamento muito estranho dos arrays. Quando passo um array para uma função e tento descobrir seu tamanho usando `sizeof`, obtenho algo diferente do que espero. Aqui está um exemplo: ```cpp #include void printSize(int arr[]) { std::cout << "Dentro da função: " << sizeof(arr) << " bytes" << std::endl; } int main() { int numbers[5] = {1, 2, 3, 4, 5}; std::cout << "No main: " << sizeof(numbers) << " bytes" << std::endl; // Exibe 20 (5 * 4) printSize(numbers); // Exibe 8 (tamanho do ponteiro) em sistemas de 64 bits return 0; } ``` Eu esperava que dentro da função `sizeof(arr)` também retornasse 20, mas obtenho 8. Por que isso acontece? Ouvi o termo "array decay", mas não entendo exatamente o que significa. Como isso afeta a passagem de arrays para funções? E como trabalhar corretamente com arrays para não perder informações sobre seu tamanho? Explique, por favor, detalhadamente e, de preferência, com exemplos. Desde já, obrigado!