Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » sizeof(array)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.10.2006, 23:56 Uhr
~GastGast
Gast


Hallo !

Bei dem Code...

C++:
void bla(bool arrayParam[7])
{
  bool arrayIntern[7];
  memcpy(arrayIntern, arrayParam, sizeof(arrayParam));
}

...gibt mir der Compiler für das sizeof den Wert 4 zurück
(er berechnet also die Größe des Pointers und nicht die
Bytelänge vom dem Array auf das der Pointer zeigt).

Klar könnte ich da jetzt auch einfach ne 7 eintragen
damit er die gewünschte Bytelänge des Arrays benutzt,
aber ich wollte einfach mal fragen ob es auch mit
sizeof ne Möglichkeit gibt an die Bytelänge des Arrays
zu kommen? Müsste doch eigentlich möglich sein denn
zur Compilezeit kennt der Compiler ja die Arraylänge
in Bytes uns sizeof arbeitet ja auch zur Compilezeit.

sizeof(*arrayParam) geht ja auch nicht, weil mir das 1
zurückgibt. Aalso die Größe des ersten Arrayfelds weil
für ihn sizeof(*arrayParam) ja natürlich das gleiche wie
sizeof(arrayParam[0]) ist.

Danke !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.10.2006, 00:32 Uhr
~GastGast
Gast


Ich habe grade in der C++ Reference gelesen das sizeof(array)
mir eigentlich doch die bytelänge des arrays zurückgeben müßte:


Zitat:
When the sizeof operator is applied to an array, it yields the total number of bytes in that array, not the size of the pointer represented by the array identifier.


Wieso gibt der mir dann die pointer grösse (4) zurück
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.10.2006, 00:47 Uhr
~GastGast
Gast


Hab die Antwort grad hier gefunden :

www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_21896756.html
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.10.2006, 00:48 Uhr
~GastGast
Gast


Danke Blubber für Deine Antwort!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.10.2006, 10:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


noch ne anmerkung. Da du c++ verwendest (bool legt das nahe) kannst du auch fertige "array-klassen" aus der STL (z.b. vector usw...) verwenden. Diese merken sich selbst welche größe "ihr array" gerade hat
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: