Wenn eine Funktion hat eine bestimmte Größe-array-parameter, warum wird es ersetzt mit einem Zeiger?

Gegeben, das folgende Programm,

#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
  1. Warum ist das array übergeben als pointer auf das erste element?
  2. Ist es ein Erbe aus C?
  3. Was bedeutet der standard sagen?
  4. Warum ist die strikte Typsicherheit von C++ gelöscht?
Ich benutze immer-std::array in diesen Fällen verhindert haben, um sich mit Fragen wie diese und arbeitet mit std-algorithmen zu
Was strenge Typsicherheit? Wer hat versprochen strenge Typsicherheit? Es gibt keine solche Sache in C++.
TL;DR für die unten Antworten: Arrays werden Zeiger als Parameter an die Funktion übergeben, so dass, wenn Sie überprüfen Sie Ihre Größe alles, was Sie bekommen, ist die Größe eines Zeigers. Wenn Sie arbeiten, nur C, alle, die ich vorschlagen kann, ist, dass Sie im Voraus berechnen, welche Größe Sie auch immer versuchen, um aus dem array als weiteren parameter.
Relevanten Linus rant

InformationsquelleAutor CsTamas | 2009-08-25

Schreibe einen Kommentar