Forum: Mikrocontroller und Digitale Elektronik Feldgrösse eines Array


von Markus (Gast)


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

von Jim M. (turboj)


Lesenswert?

Vollständigen source code, bitte als Anhang.

von Rufus Τ. F. (rufus) Benutzerseite


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ß.

von Ohmann (Gast)


Lesenswert?

Ich nehme Mal an, du hast einfach den sizeof Operator verwendet , auf 
das gesamte Array als Solches ?

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

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.

von Dirk B. (dirkb2)


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.

von J. F. (Firma: Père Lachaise) (rect)


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\

von Rufus Τ. F. (rufus) Benutzerseite


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));

von Markus (Gast)


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

von J. F. (Firma: Père Lachaise) (rect)


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"...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von J. F. (Firma: Père Lachaise) (rect)


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.

von Bernd K. (prof7bit)


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?

von illegal (Gast)


Lesenswert?

Wie wäre es mit...
(6  4  sizeof(float))
... und die magic numbers durch #define ausgedrückt?

von illegal (Gast)


Lesenswert?

Hmpf...
1
(6 * 4 * sizeof(float))

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.