offsetof()

offsetof ist definiert in der stddef, die in C über stddef.h, bzw. in C++ über cstddef eingebunden wird.

Funktion

offsetof() ist ein 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 <stdio.h>  // für printf()
#include <stdlib.h> // für EXIT_SUCCESS
#include <stddef.h>
 
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 (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