Warum scheint der Verfall auf Zeiger für Array-Argumente nicht auf sizeof () zuzutreffen?

Ich habe vorhin eine Frage gelesen, die geschlossen wurde, weil es sich um ein genaues Duplikat handelt

Warum wird eine Funktion mit einem Array-Parameter bestimmter Größe durch einen Zeiger ersetzt?

und

Wie finde ich die 'sizeof' (ein Zeiger auf ein Array)?

Aber nachdem ich das gelesen habe, bin ich immer noch verwirrt darüber, wie sizeof () funktioniert. Ich verstehe, dass die Übergabe eines Arrays als Argument an eine Funktion wie

  void foo(int a[5])

führt dazu, dass das Array-Argument auf einen Zeiger verwandelt wird. Was ich in den obigen 2 Fragenlinks nicht gefunden habe, war eine klare Antwort, warum es das istsizeof() Die Funktion selbst ist von diesem Zeigerzerfallsverhalten ausgenommen (oder zumindest scheinbar ausgenommen). Wenn sizeof () sich wie jede andere Funktion verhalten hat

   int a[5] = {1,2,3,4,5};
   cout << sizeof(a) << endl;

dann sollte das obige ausgeben4 anstatt20. Habe ich etwas Offensichtliches verpasst, da dies ein Widerspruch zum Zerfall des Zeigerverhaltens zu sein scheint ??? Es tut mir leid, dass ich das noch einmal angesprochen habe, aber es fällt mir wirklich schwer zu verstehen, warum das passiert, obwohl ich die Funktion jahrelang glücklich genutzt habe, ohne wirklich darüber nachzudenken.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage