sizeof() eines Arrays

OP #3399936
Lesenswert?
• ▲
▼
Die Frage ist, aus wievielen Arrays besteht mein Array?
Ich würde hier nun eine 8 erwarten.
1
IO_DIGITAL digital[8] = { [0 ... 7] = 0 };
2

3
sizeof(digital) // gibt mir 128 zurück, was der größes der IO_DIGITAL structure entspricht.
4

5
sizeof(digital[0]) // hingegen gibt 16 zurück, was mir nicht in die Birne will.
OP #3399950
Lesenswert?
• ▲
▼
Jörg Wunsch schrieb:
> Verwechselst du eventuell Bits und Bytes?

Naja, aber ich komme da denoch nicht auf 16

vielleicht treibe ich hier auch einfach nur Bullshit, ich könnte ja 
genauso gut auch

"#define NUMBER_OF_IO 8"
und das anstelle von sizeof() verwenden

> Leider ist meine Kristallkugel schon wieder in der Reparatur, sodass
> ich nicht erkennen kann, wie IO_DIGITAL genau aufgebaut ist.
1
typedef struct                      // 128 Bit
2
{
3
    UINT32    value;                // 32 current value
4
    rtccDate    dt;                 // 32 date
5
    rtccTime    tm;                 // 32 Time
6
    UINT8       io;                 //  8 IO Number (Pin Number)
7
    UINT8     block_time;           //  8 blocktime counter
8
    UINT8      rsvd;                // 16 reserved
9
    union
10
    {
11
        struct
12
        {
13
   UINT8 bEventOnMin : 1;
14
   UINT8 bEventOnMax : 1;
15
         UINT8 bEventOnValue : 1;
16
         UINT8 bEventOnTime : 1;
17
         UINT8 bReserved : 4;
18
  } bits;
19
        UINT8 val;
20
    } flags;
21
} IO_DIGITAL;
Moderator #3399969
Lesenswert?
• ▲
▼
Stimmt doch: Die Größe von IO_DIGITAL ist
1
  3 · 4 Bytes (value, dt und tm)
2
+ 3 · 1 Byte  (io, block_time und rsvd)
3
+ 1 · 1 Byte  (flags)
4
—————————————
5
     16 Bytes

Da das Array acht Elemente enthält, ist es achtmal so groß, also 128
Bytes.
Gast #3399985
Lesenswert?
• ▲
▼
> sizeof(digital[0]) // hingegen gibt 16 zurück

ist auch klar weil

>typedef struct                      // 128 Bit
>{
>...
>} IO_DIGITAL;

128bit = 16 Byte gross ist.

Damit ergibt

> sizeof(digital)

128 Byte, da 'digital' aus 8 'IO_DIGITAL' Datensätzen mit je 16 Byte 
besteht

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.