Next: Dynamic Memory Allocation, Up: Structures [Contents][Index]
To make a structure useful, there has to be a way to examine and store
its fields. The ‘.’ (period) operator does that; its use looks
like object.field
.
Given this structure and variable,
struct intlistlink { int datum; struct intlistlink *next; }; struct intlistlink foo;
you can write foo.datum
and foo.next
to refer to the two
fields in the value of foo
. These fields are lvalues, so you
can store values into them, and read the values out again.
Most often, structures are dynamically allocated (see the next
section), and we refer to the objects via pointers.
(*p).field
is somewhat cumbersome, so there is an
abbreviation: p->field
. For instance, assume the program
contains this declaration:
struct intlistlink *ptr;
You can write ptr->datum
and ptr->next
to refer
to the two fields in the object that ptr
points to.
If a unary operator precedes an expression using ‘->’, the ‘->’ nests inside:
-ptr->datum is equivalent to -(ptr->datum)
You can intermix ‘->’ and ‘.’ without parentheses, as shown here:
struct { double d; struct intlistlink l; } foo; …foo.l.next->next->datum…