sizeof() eines Arrays

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

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