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!