Skip to content

C Structures

An introduction to C Structures

Using the struct keyword we can create complex data structures using basic C types.

A structure is a collection of values of different types. Arrays in C are limited to a type, so structures can prove to be very interesting in a lot of use cases.

This is the syntax of a structure:

struct <structname> {
  //...variables
};

Example:

struct person {
  int age;
  char *name;
};

You can declare variables that have as type that structure by adding them after the closing curly bracket, before the semicolon, like this:

struct person {
  int age;
  char *name;
} flavio;

Or multiple ones, like this:

struct person {
  int age;
  char *name;
} flavio, people[20];

In this case I declare a single person variable named flavio, and an array of 20 person named people.

We can also declare variables later on, using this syntax:

struct person {
  int age;
  char *name;
};

struct person flavio;

We can initialize a structure at declaration time:

struct person {
  int age;
  char *name;
};

struct person flavio = { 37, "Flavio" };

and once we have a structure defined, we can access the values in it using a dot:

struct person {
  int age;
  char *name;
};

struct person flavio = { 37, "Flavio" };
printf("%s, age %u", flavio.name, flavio.age);

We can also change the values using the dot syntax:

struct person {
  int age;
  char *name;
};

struct person flavio = { 37, "Flavio" };

flavio.age = 38;

Structures are very useful because we can pass them around as function parameters, or return values, embedding various variables within them, and each variable has a label.

It’s important to note that structures are passed by copy, unless of course you pass a pointer to a struct, in which case it’s passed by reference.

Using typedef we can simplify the code when working with structures.

Let’s make an example:

typedef struct {
  int age;
  char *name;
} PERSON;

The structure we create using typedef is usually, by convention, uppercase.

Now we can declare new PERSON variables like this:

PERSON flavio;

and we can initialize them at declaration in this way:

PERSON flavio = { 37, "Flavio" };

→ Here's my latest YouTube video

→ Get my C Handbook

→ I wrote 17 books to help you become a better developer, download them all at $0 cost by joining my newsletter

JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025

Bootcamp 2025

Join the waiting list