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

In Anbetracht des folgenden Programms,

#include <iostream>

using namespace std;

void foo( char a[100] )
{
    cout << "foo() " << sizeof( a ) << endl;
}

int main()
{
    char bar[100] = { 0 };
    cout << "main() " << sizeof( bar ) << endl;
    foo( bar );
    return 0;
}

Ausgänge

main() 100
foo() 4
Warum wird das Array als Zeiger auf das erste Element übergeben?Ist es ein Erbe von C?Was sagt der Standard?Warum wird die strenge Typensicherheit von C ++ aufgegeben?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage