Feldgrösse eines Array

Gast #5369732
Lesenswert?

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
Persönliche Seite #5369743
Lesenswert?

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ß.
#5369815
Lesenswert?

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.
(Firma: Père Lachaise) #5369819
Lesenswert?

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\
Persönliche Seite #5369915
Lesenswert?

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));
Gast #5369936
Lesenswert?

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
(Firma: Père Lachaise) #5370099
Lesenswert?

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"...
(Firma: Père Lachaise) #5370937
Lesenswert?

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.
#5371055
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren