Chapter Contents

Previous

Next
offsetof

offsetof



Get the Byte Offset of a Structure Component

Portability: ISO/ANSI C conforming


SYNOPSIS
DESCRIPTION
RETURN VALUE
EXAMPLES


SYNOPSIS

#include <stddef.h>

   /* macro */
size_t offsetof(type, element)


DESCRIPTION

The offsetof macro provides the decimal byte offset of a component within a structure as a size_t constant. This constant is generated at compile time. Padding for alignment, if any, is included. The operands of offsetof are a structure type ( type ) and a component of the structure specification ( element ). The component specification does not include the structure type or the selection operators . or -> .


RETURN VALUE

offsetof returns the byte offset of element .


EXAMPLES

As shown in these examples, you should write the member specification as it would be written to access the value of a structure member, except that there is no leading . or -> selection operator.

Example 1.1

#include <stddef.h>

struct AAA {    /* Define structure AAA. */
   double ddd;
   char ccc;
   int bbb;
   };
long x;
   /* x is the byte offset of component bbb in struct AAA. */
x = offsetof(struct AAA, bbb);

Example 1.2 shows a structure, data , with an inner structure base .

Example 1.2

#include <stddef.h>

struct data {        /* Define struct data.      */
   int id;
   int *elem;
   char *name;
   struct {          /* Define struct type base. */
      double proj;
      } base;
   };
   long ofs;
      /* ofs is the byte offset of base.proj.     */
   ofs = offsetof(struct data, base.proj);

In Example 1.3, complex is defined via a typedef statement to be a structure type. The component specification inner.d[5] specifies an array element within an inner structure. The variable y is set to the offset of the sixth array element in the inner structure ( decimal 56 ).

Example 1.3

#include <stddef.h>

typedef struct {   /* Define struct type complex. */
   struct XXX *xptr, *xptr2;
   struct {         /* Define struct type inner.  */
      int count, count2;
      double d[10];
      } inner;
   struct XXX *xptr3;
   } complex;
      /* y is the byte offset of inner.d[5].       */
   long y;
   y = offsetof(complex, inner.d[5]);


Chapter Contents

Previous

Next

Top of Page

Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.