Frage zu 'sizeof'

Jackson0

Grünschnabel
Hallo,

warum liefert folgender Code die Länge 256 anstatt 128?

Code:
		{ short FlashData[] = {
				0x0001, 0x0203, 0x0405, 0x0607, 0x0809, 0x0A0B, 0x0C0D, 0x0E0F,
				0x1011, 0x1213, 0x1415, 0x1617, 0x1819, 0x1A1B, 0x1C1D, 0x1E1F,
				0x2021, 0x2223, 0x2425, 0x2627, 0x2829, 0x2A2B, 0x2C2D, 0x2E2F,
				0x3031, 0x3233, 0x3435, 0x3637, 0x3839, 0x3A3B, 0x3C3E, 0x3D3F,
				0x4041, 0x4243, 0x4445, 0x4647, 0x4849, 0x4A4B, 0x4C4D, 0x4E4F,
				0x5051, 0x5253, 0x5455, 0x5657, 0x5859, 0x5A5B, 0x5C5D, 0x5E5F,
				0x6061, 0x6263, 0x6465, 0x6667, 0x6869, 0x6A6B, 0x6C6E, 0x6D6F,
				0x7071, 0x7273, 0x7475, 0x7677, 0x7879, 0x7A7B, 0x7C7D, 0x7E7F,
				0x8081, 0x8283, 0x8485, 0x8687, 0x8889, 0x8A8B, 0x8C8D, 0x8E8F,
				0x9091, 0x9293, 0x9495, 0x9697, 0x9899, 0x9A9B, 0x9C9D, 0x9E9F,
				0xA0A1, 0xA2A3, 0xA4A5, 0xA6A7, 0xA8A9, 0xAAAB, 0xACAD, 0xAEAF,
				0xB0B1, 0xB2B3, 0xB4B5, 0xB6B7, 0xB8B9, 0xBABB, 0xBCBD, 0xBEBF,
				0xC0C1, 0xC2C3, 0xC4C5, 0xC6C7, 0xC8C9, 0xCACB, 0xCCCD, 0xCECF,
				0xD0D1, 0xD2D3, 0xD4D5, 0xD6D7, 0xD8D9, 0xDADB, 0xDCDD, 0xDEDF,
				0xE0E1, 0xE2E3, 0xE4E5, 0xE6E7, 0xE8E9, 0xEAEB, 0xECED, 0xEEEF,
				0xF0F1, 0xF2F3, 0xF4F5, 0xF6F7, 0xF8F9, 0xFAFB, 0xFCFD, 0xFEFF };
				write_eeprom(0x0000, sizeof(FlashData), FlashData); }

Gruß
Jackson
 
Das ist mir schon klar das Short 2Byte groß ist, stehen ja auch 2Byte zw. den Kommas.

Aber das def. Short-Array ist besteht doch aus 128 Einheiten a 2 Byte und sizeof sollte dann doch 128 liefern?
 
gibt es noch einen anderen Befehl der die Länge des Arrays (hier 128) liefert oder muss man sizeof immer durch 2,4,8 je nachdem ob short,int,long, etc. teilen?
 
Genau.

Genereller:
Einen Befehl, der für beliebige Arrays die Länge liefert,
gibts (plattformübergreifend) überhaupt nicht.
sizeof funktioniert zB. schon mal nicht für malloc-ierte Pointer.
In so einem Fall ist oft ein int mit der Elementanzahl als Wert hilfreich.
 
write_eeprom(0x0000, sizeof short (FlashData), FlashData);
write_eeprom(0x0000, sizeof (short) (FlashData), FlashData);
write_eeprom(0x0000, (sizeof short) (FlashData), FlashData);
write_eeprom(0x0000, sizeof (short FlashData), FlashData);

Erzeugen all Syntaxfehler (zur Info kein c++ Compiler)
 
Code:
write_eeprom(0x0000, sizeof(FlashData) / sizeof(FlashData[0]), FlashData);
Die Berechnung der Elementanzahl funktioniert so für jeden Datentyp. (natürlich nur bei 'echten' Arrays)
 
Zuletzt bearbeitet:
Zurück