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!!!
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ß
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]
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)
Ah, Jörg war mal wieder schneller ;) Na, wenn sizof(int) == 2, dann ist auch erklärlich warum sizeof(zahlreihe) == 10 oder?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.