Avatar ·

Was ist Array-to-Pointer Decay in C++?

Hallo Kollegen! Ich habe gerade angefangen, C++ zu lernen, und bin auf ein sehr seltsames Verhalten von Arrays gestoßen. Wenn ich ein Array an eine Funktion übergebe und versuche, seine Größe mit `sizeof` zu ermitteln, bekomme ich nicht das, was ich erwarte. Hier ist ein Beispiel: ```cpp #include void printSize(int arr[]) { std::cout << "Innerhalb der Funktion: " << sizeof(arr) << " Bytes" << std::endl; } int main() { int numbers[5] = {1, 2, 3, 4, 5}; std::cout << "In main: " << sizeof(numbers) << " Bytes" << std::endl; // Gibt 20 aus (5 * 4) printSize(numbers); // Gibt 8 aus (Größe eines Zeigers) auf einem 64-Bit-System return 0; } ``` Ich habe erwartet, dass `sizeof(arr)` innerhalb der Funktion ebenfalls 20 zurückgibt, aber ich bekomme 8. Warum passiert das? Ich habe den Begriff "array decay" gehört, verstehe aber nicht ganz, was das bedeutet. Wie wirkt sich das auf die Übergabe von Arrays an Funktionen aus? Und wie arbeite ich richtig mit Arrays, um die Informationen über ihre Größe nicht zu verlieren? Bitte erklären Sie es mir ausführlich und möglichst mit Beispielen. Vielen Dank im Voraus!