Hallo zusammen! Ich bin noch nicht so Sattelfest mit C und bin gerade an einem Projekt, indem ich ein Array (float zeit[6][4]) benötige. Trotz float Deklaration ist ein Feld immernoch nur 8 Bit gross. Ist es möglich ein Feld grösser zu deklarieren oder versteh ich grundsätzlich etwas falsch? Vielen Dank für eure Hilfe Gruss Markus
Markus schrieb: > Trotz float Deklaration ist ein Feld immernoch nur 8 Bit gross Wie kommst Du darauf? Womit ermittelst Du das? Markus schrieb: > oder versteh ich grundsätzlich etwas falsch? Vermutlich. Was Du da deklariert hast, ist ein zweidimensionales Array mit Platz für insgesamt 24 float-Werten. Angenommen, daß Dein float 32 Bit groß ist, ist Dein Array also insgesamt 96 Bytes groß.
Ich nehme Mal an, du hast einfach den sizeof Operator verwendet , auf das gesamte Array als Solches ?
Die Größe deines Arrays kannst du bspw. so bestimmen:
1 | #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof((array)[0]))
|
Wie schon angemerkt sollte dieses (vermutlich) 96 Byte groß sein.
J. F. schrieb: > Die Größe deines Arrays kannst du bspw. so bestimmen: > >
1 | > #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof((array)[0])) |
2 | >
|
> > Wie schon angemerkt sollte dieses (vermutlich) 96 Byte groß sein. Da klappt aber nur in dem Scope, in dem das Array auch definiert ist. Als Parameter in einer Funktion klappt das nicht mehr (C-Grundlagen) Da kann durchaus (bei 64-Bit-Systemen) als Ergebnis von sizeof 8 Byte raus kommen.
Dirk B. schrieb: > Da klappt aber nur in dem Scope, in dem das Array auch definiert ist. > > Als Parameter in einer Funktion klappt das nicht mehr (C-Grundlagen) Davon bin ich ausgegangen. Wenn er nur den Anfang (ohne weitere Informationen) kennt, wie soll er dann die Größe bestimmen? > Da kann durchaus (bei 64-Bit-Systemen) als Ergebnis von sizeof 8 *Byte* > raus kommen. Oder 2 Byte. Oder auch 1 Byte. /o\
J. F. schrieb: > Die Größe deines Arrays kannst du bspw. so bestimmen: Damit bestimmst Du nicht die Größe des Arrays, sondern die Anzahl der Einträge in der ersten Arraydimension. Im vorliegenden Beispiel also 6. Den Wert 96 erhälst Du mit diesem Macro jedenfalls nicht, den gibt es mit
1 | float zeit[6][4]; |
2 | |
3 | printf("Arraygröße %d\n", sizeof(zeit)); |
Ich habe gedacht ich hätte etwas falsch deklariert zu haben aber da war noch eine uint_8t Variable dazwischen welche die Zahl verworfen hat. richtig dumm 0.0 Trotzdem vielen Dank für die Antworten! Gruss Markus
Rufus Τ. F. schrieb: > Damit bestimmst Du nicht die Größe des Arrays, sondern die Anzahl der > Einträge in der ersten Arraydimension. Im vorliegenden Beispiel also 6. > > Den Wert 96 erhälst Du mit diesem Macro jedenfalls nicht, den gibt es > mit > >
1 | > float zeit[6][4]; |
2 | >
|
3 | > printf("Arraygröße %d\n", sizeof(zeit)); |
4 | >
|
Du hast vollkommen Recht, das Makro war in der Tat für ein eindimensionales Array. Richtig wäre in diesem Fall sowas:
1 | #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof((array)[0][0]))
|
Damit wird es dann halt auch wieder "eindimensional". Schön ist es dann aber nicht mehr... Markus schrieb: > Ich habe gedacht ich hätte etwas falsch deklariert zu haben aber da war > noch eine uint_8t Variable dazwischen welche die Zahl verworfen hat. > richtig dumm 0.0 Was hat die uint8_t Variable damit zu tun? /edit: womit natürlich auch wieder die Anzahl der Einträge herauskommen und nicht die gewünschte "Feldgröße"...
J. F. schrieb: > und nicht die gewünschte "Feldgröße"... Damit könnte die Größe eines Elements gemeint sein. Simpel: sizeof float Umständlich: sizeof array[0][0] Nur wozu?
Rufus Τ. F. schrieb: > J. F. schrieb: >> und nicht die gewünschte "Feldgröße"... > > Damit könnte die Größe eines Elements gemeint sein. Davon gehe ich auch aus. Rufus Τ. F. schrieb: > Simpel: > > sizeof float > > > Umständlich: > > sizeof array[0][0] > > Nur wozu? Korrekt, total unnötig verkompliziert. Das meinte ich in meinem Post mit "ist nicht mehr schön", obgleich es auch möglich ist.
Rufus Τ. F. schrieb: > J. F. schrieb: >> und nicht die gewünschte "Feldgröße"... > > Damit könnte die Größe eines Elements gemeint sein. > > Simpel: > > sizeof float > > Umständlich: > > sizeof array[0][0] > > Nur wozu? Damit man keine fehlerträchtige Redundanz einbaut vielleicht? Oder damit man für den Leser dokumentiert daß es nicht um den size von float geht sondern um den size des Arrayelements, egal welchen Typ das Arrayelement in dieser Konfiguration zufällig zu haben beliebt?
Wie wäre es mit... (6 4 sizeof(float)) ... und die magic numbers durch #define ausgedrückt?
Bernd K. schrieb: > Damit man keine fehlerträchtige Redundanz einbaut vielleicht? Nein; in welchem Kontext muss man wissen, wie groß ein Element eines Arrays ist? Klar, es gibt Anwendungen, wo man das braucht, aber ich habe das Gefühl, daß es hier nicht um derartiges geht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.