Back to C++
2026-05-046 min read

C structure (C++)

Learn C structure (C++) step by step with clear examples and exercises.

Why This Matters

In this full guide, we delve into the world of C++ structures - an essential tool for managing complex data types with ease and efficiency. Structures play a crucial role in organizing related variables under a single name or tag, making them indispensable when dealing with records that contain multiple fields of different data types.

Whether you're preparing for an interview, working on a complex project, or simply curious about the inner workings of C++, this lesson will provide you with practical insights, real-world examples, and tips to avoid common pitfalls.

Prerequisites

Before diving into C++ structures, it's essential that you have a solid understanding of the following concepts:

  1. Basic C++ syntax and programming constructs (variables, operators, control statements)
  2. Classes and Object-Oriented Programming (OOP) principles in C++
  3. Understanding of data types and their representations
  4. Familiarity with file input/output operations in C++
  5. Basic understanding of memory management in C++
  6. Knowledge of standard template library (STL) containers such as vectors, lists, and maps

Core Concept

In C++, a structure is a user-defined data type that groups related variables together under a single name or tag. Structures can contain variables of different data types, making them versatile for organizing complex data structures.

To declare a structure, we use the struct keyword followed by the structure's name and a pair of curly braces containing its member variables. Here's an example:

struct Student {
std::string name;
int age;
float gpa;
};

In this example, we define a Student structure with three members: name, age, and gpa. Each member represents a different attribute of a student record.

To create an instance of the structure, we use the structure's name followed by curly braces containing the values for each member variable. For example:

Student john;
john.name = "John Doe";
john.age = 23;
john.gpa = 3.8;

In this example, we create a Student object named john and assign values to its member variables.

Structures vs Classes

While structures and classes are similar in many ways, there are some key differences:

  1. By default, structure members are public, whereas class members can be private, protected, or public.
  2. Structures do not support inheritance or polymorphism, while classes do.
  3. Structures are typically used for simple data structures with no behavior, as they are more lightweight than classes in C++.

Worked Example

Let's consider a more complex example where we define a structure for a library book record that includes the book title, author, publication year, and available status. We will also implement functions to read and write these records from/to files.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

struct Book {
std::string title;
std::string author;
int year;
bool available;
};

std::vector<Book> readBooks(const std::string& filename) {
// Read and store book records from the file
}

void writeBooks(const std::vector<Book>& books, const std::string& filename) {
// Write book records to the file
}

int main() {
std::ifstream inputFile("books.txt");
std::ofstream outputFile("new_books.txt");
std::vector<Book> books = readBooks("books.txt");

// Manipulate book records as needed...

writeBooks(books, "new_books.txt");

return 0;
}

In this example, we define a Book structure with four members: title, author, year, and available. We then implement two functions, readBooks() and writeBooks(), to read and write book records from/to files. In the main() function, we open input and output files, read book records into a vector, manipulate them as needed, and then write the updated records to a new file.

Using STL Containers with Structures

In this example, we use the STL container std::vector to store our Book objects. This allows us to easily manage large amounts of data and perform various operations on them.

Common Mistakes

  1. Forgetting to include necessary headers: Make sure you include all required headers (such as `, , , and `) for working with files, structures, and STL containers.
  2. Incorrect structure declaration syntax: Ensure that your structure declarations follow the correct syntax, using the struct keyword and properly defining member variables within curly braces.
  3. Accessing undefined or non-existent members: Be mindful of the names and data types of structure members when accessing them in code.
  4. Incorrect file I/O operations: Double-check your file input/output functions to ensure they are reading and writing data correctly.
  5. Not initializing structure variables: Make sure you initialize all structure variables before using them in your code.
  6. Structures with the same name as existing keywords: Avoid naming structures with names that conflict with existing C++ keywords, such as int, float, or bool.
  7. Using a structure's name instead of its member name: Remember to use the dot (.) operator when accessing structure members, and avoid using the structure's name directly.
  8. Ignoring structure padding: Be aware that structures may have padding between their members due to alignment requirements, which can affect memory usage and performance.

Common Mistakes - Subheadings

1.1 Incorrect Structure Declaration Syntax

1.2 Accessing Undefined or Non-existent Members

1.3 Incorrect File I/O Operations

1.4 Not Initializing Structure Variables

1.5 Structures with the Same Name as Existing Keywords

1.6 Using a Structure's Name Instead of its Member Name

1.7 Ignoring Structure Padding

Practice Questions

  1. Create a Car structure with members for the car's make, model, year, and mileage. Write a function to read a list of cars from a file into a vector of Car objects.
  2. Modify the Book example provided earlier to include an additional member for the book's ISBN number. Implement functions to sort the books by ISBN number and title.
  3. Create a Person structure with members for the person's name, age, and occupation. Write a function to read a list of people from a file into a vector of Person objects and calculate the average age of the group.
  4. Modify the Car example to include an additional member for the car's color. Implement functions to sort the cars by make, model, year, and color.
  5. Create a Product structure with members for the product name, price, and stock quantity. Write a function to read a list of products from a file into a map where the key is the product name and the value is a Product object. Implement functions to add, remove, and search for products in the map.

FAQ

  1. Why use structures instead of classes?: Structures are more lightweight than classes in C++, as they do not support inheritance or polymorphism. However, for simple data structures with no behavior, structures can be a good choice due to their simplicity and ease of use.
  2. Can I access structure members directly like class members?: Yes, you can access structure member variables directly using the dot (.) operator in C++.
  3. How do I create an array of structures?: To create an array of structures, simply declare a variable with the structure type followed by square brackets [] containing the number of elements. For example: Book books[100]; creates an array of 100 Book objects.
  4. What happens if I try to access an undefined or non-existent member in a structure?: If you attempt to access an undefined or non-existent member in a structure, the compiler will generate an error. Make sure your structure declarations and usage are correct to avoid such errors.
  5. Can I inherit from a structure in C++?: No, structures do not support inheritance in C++. Inheritance is only supported for classes.
  6. What is structure padding?: Structure padding refers to the additional space between structure members due to alignment requirements. This can affect memory usage and performance.
  7. How can I avoid structure padding?: To minimize structure padding, you can ensure that all your structure members have the same size and are properly aligned. You can also use bit-fields or pack structures to reduce padding.
C structure (C++) | C++ | XQA Learn