====== offsetof() ====== offsetof ist definiert in der ''[[start|stddef]]'', die in C über ''stddef.h'', bzw. in C++ über ''cstddef'' eingebunden wird. ===== Funktion ===== offsetof() ist ein [[c:pre:|Präprozessor-Makro]], das das Byte-Offset von Membern innerhalb einer Struktur ausgibt. Der Rückgabewert gibt also an, wieviele Bytes sich ein Member hinter dem Beginn der Struktur befindet. ===== Signatur ===== #define offsetof( type, member ) **type**: Strukturdatentyp \\ **member**: Name eines Members des Strukturdatentyps (Datentyp [[size_t]]) **Return value**: Byteoffset des Members innerhalb der Struktur ===== Beispiel ===== #include // für printf() #include // für EXIT_SUCCESS #include struct Person { char Vorname[32]; char Nachname[32]; char Geschlecht; unsigned int Alter; }; int main( void ) { printf( "Groesse der Datenstruktur: %d\n", sizeof( struct Person )); printf( "Position Vorname : %d\n", offsetof(struct Person,Vorname)); printf( "Position Nachname : %d\n", offsetof(struct Person,Nachname)); printf( "Position Geschlecht : %d\n", offsetof(struct Person,Geschlecht)); printf( "Position Alter : %d\n", offsetof(struct Person,Alter)); return EXIT_SUCCESS; } Ausgabe: Groesse der Datenstruktur: 72 Position Vorname : 0 Position Nachname : 32 Position Geschlecht : 64 Position Alter : 68 ===== Hinweis ===== In C++ wird mit einer Struktur oder Klasse automatisch ein Datentyp angelegt ([[c:type:typedef]]). In C geschieht das nicht. Der Name des Typs lautet deswegen ''struct Person'' und nicht nur ''Person''. Die Größe des Datentyps ist 69 Bytes. Der hier verwendete GNU-Compiler optimiert hier die Struktur auf Zugriffsgeschwindigkeit und fügt deswegen drei unbenutzte Bytes ein. Wird die Struktur in ein Array eingesetzt, so lässt sich so schneller auf die einzelnen Elemente zugreifen. ===== siehe auch ===== [[C:]]: [[c:type:typedef]]