Structures
Structures (also called structs) is a way in C to group several related variables into a larger variable. They are also supported in C++, although classes are normally used instead (one of the key differences between the two in C++ is that struct members are public by default, classes members are private by default).
Basic Usage
For example, the following code declares a struct
that represents an error, and encapsulates an errorCode
and an errorString
:
This only declares the struct, to use one we must create an instance of it. Then members can be accessed with the dot (.
) operator:
Using Typedef
The typedef
keyword can be used when defining a struct
:
And then instead of creating an instance with struct error <variable_name>
, you can use error_t <variable_name>
like so:
Initialising Structures
Initialising structures is way of defining what the values of the variables inside the struct
will be at the time of creation. Note that there is a big syntax difference between initialising structures in C and in C++.
Unfortunately, you cannot define default variables for a structure when you declare it, only when you create an instance of that structure type. If this is annoying you, you might want to consider switching to C++, which allows you to do such a thing by using the class and constructor mechanisms.
Copying Structures
You can easily copy a struct
in C with the assignment operator (=
). Although not the recommended method, you can also use memcpy()
to do the same thing.
Self-referencing Structures
You can self-reference a structure, but you cannot include the structure type in the structure itself (with would cause infinite recursion). To self-reference a structure, you have to use the little-used (in C anyway) name after typedef struct.
Further Reading
Structs are a key part of the opaque pointer design pattern.