Aggregates and Pointer Arithmetic
One of the most common uses of pointers in C is referencing aggregate data. Aggregate data is data composed of multiple elements grouped together because they are somehow related. C supports two classes of aggregate data: structures and arrays. (Unions, although similar to structures, are considered formally to be in a class by themselves.)
Structures
Structures are sequences of usually heterogeneous elements grouped so that they can be treated together as a single coherent datatype. Pointers to structures are an important part of building data structures. Whereas structures allow us to group data into convenient bundles, pointers let us link these bundles to one another in memory. By linking structures together, we can organize them in meaningful ways to help solve real problems.
As an example, consider chaining a number of elements together
in memory to form a linked list (see Chapter 5). To do this, we might use a structure like
ListElmt
in the following code. Using a
ListElmt
structure for each element in
the list, to link a sequence of list elements together, we set the
next
member of each element to point to
the element that comes after it. We set the
next
member of the last element to NULL
to mark the end of the list. We set the
data
member of each element to point to
the data the element contains. Once we have a list containing
elements linked in this way, we can traverse the list by following
one next
pointer after another.
typedef struct ListElmt_ ...
Get Mastering Algorithms with C now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.