Forum: Compiler & IDEs Größenangabe von Feldern


von Daniel M. (Gast)


Lesenswert?

Ich möchte ein Feld erzeugen mit nur 5 Elementen.

Wenn ich das Programm laufen lasse erzeugt er mir aber ein Feld mit 11
Elementen.

Die Größe des Feldes speichere ich im Datenelement 0 ab.

Hier das Programm:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include <avr/io.h>

int main(void)
{
  UBRRL  = 0x33;
  UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);

  int zahlreihe[5] = {1,2,3,4,5}, *zeiger;
  zeiger = zahlreihe;

  int zger = sizeof(zahlreihe);
  *zeiger = zger;
  while(1)
  {
    while (zger >= 0)
    {
      loop_until_bit_is_set(UCSRA,UDRE);
      UDR = *zeiger;
      zeiger++;
      zger--;
    }
  }
} // Ende main

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Als Ergebnis erhalte ich in meinem Terminalprogramm folgendes;
15:27:38.72 [RX] - 0A 02 03 04 05 57 04 57 6A 00 00

0A->11 und 11 Elemente werden dargestellt!!!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

sizeof(int) == 2

von Daniel M. (Gast)


Lesenswert?

danke Jörg,
habe ich mir auch schon gedacht, da ich es auf uint8_t abänderte.

Aber warum steht in einem Buch( wie zB. Mikrocomputertechnik mit
Controllern der Atmel AVR-RISC Familie von G.Schmitt)

"sizeof(Feldbezeichner) liefert die Anzahl der Feldelemente..."

und nicht die Anzahl der Bytes.

Gruß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das musst du den Autor des Buches fragen -- es ist schlich
falsch.

Der generische Weg, die Anzahl der Feldelemente zu ermitteln ist:

sizeof Feld / sizeof Feld[0]

von Karsten Brandt (Gast)


Lesenswert?

folgendes ist mir jetzt auf die Schnelle aufgefallen:

1.)

  Wenn Du mit zahlreihe[5] ein Feld bzw. Array deklarierst, dann
  wird auch nur ein Feld bzw. Array mit 5 Elementen angelegt!
  Die Indizierung läuft dann von 0...4.


2.)

  Warum bei Dir jetzt sizeof(zahlreihe) = 10 ist( dies entspricht
  0x0A ) kann ich jetzt auch erst einmal nicht sehen.


3.)

  Du hast definitiv schon einmal einen Fehler in

    while (zger >= 0)

  Damit durch läuft den Index 10...0 also 11 Elemente!
  Richtiger wäre hier

    while (zger > 0)

von Karsten Brandt (Gast)


Lesenswert?

Ah, Jörg war mal wieder schneller ;)

Na, wenn sizof(int) == 2, dann ist auch erklärlich warum

   sizeof(zahlreihe) == 10

oder?

von Rolf Magnus (Gast)


Lesenswert?

Egal, um welchen Typ es geht, sizeof liefert immer die Zahl an Bytes
zurück, die er belegt. Das gilt auch für Arrays.

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.