![]() Chapter Contents |
![]() Previous |
![]() Next |
| offsetof |
| 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.
#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
.
#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
).
#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.