002
13.10.2006, 00:42 Uhr
Blubber2063
|
Das ist nur halb richtig, du hast nichts weiter als eine Funktion definiert, die einen bool Pointer übergeben bekommt, du würdest gerne das die Länge 7 ist, das kann der Nutzer aus der Signatur ersehen, aber das was du kriegst ist ein bool Pointer. Das liegt daran das Arrays zu Pointern zerfallen, wenn sie an eine Funktion übergeben werden.
Dort wo du ein Array statisch definiert hast, weiss der Compiler ja wie gross das Feld ist, das weiss die Funktion aber nicht, denn die kann ja auch mit einem anderen bool Pointer gefüttert werden. Der sizeof Operator wird zur Compilezeit ausgewertet.
Also wenn du z.b. jetzt das bool Feld als lokale Variable in der Funktion deklarierst und dann sizeof drauf machst gibt er dir auch die Byte Größe an. Aber dein Memcpy wäre trotzdem falsch, denn der Code für die Größe eines Feldes ist immer sizeof(feld)/sizeof(feldtyp), bool wird kann ein byte sein, muss aber nicht unbedingt.
Also in deinem Beispiel
C++: |
void bla(bool arrayParam[7]) { bool arrayIntern[7]; // sizeof(arrayParam)/sizeof(bool) = 4 // aber sizeof(arrayIntern)/sizeof(bool) = 7 }
|
Ach ja und wenn du ein Feld an eine Funktion übergibts, solltest du unbedingt auch die Länge des Feldes übergeben, damit du nicht den Stack zerstörst, oder sogar einen Segfault auslöst. Dieser Post wurde am 13.10.2006 um 00:44 Uhr von Blubber2063 editiert. |