Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Структуры данных в C++: массивы, структуры и эффективное программирование

Массивы в C/C++ позволяют определять переменные, объединяющие несколько элементов одного типа, но структура — другой пользовательский тип данных, позволяющий объединять элементы разных типов.

Структуры используются для представления записи. Допустим, нужно отслеживать книги в библиотеке. Можно хранить:

Определение структуры

Для определения структуры используется оператор struct. Он определяет новый тип данных с более чем одним членом. Формат:

struct [тег_структуры] {
    определение_члена;
    определение_члена;
    ...
    определение_члена;
} [одна или более переменных_структуры];

Тег структуры опционален. Каждое определение члена — нормальное определение переменной (например, int i; или float f;). В конце, перед точкой с запятой, можно объявить переменные структуры (опционально). Объявление структуры Books:

struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} book;

Доступ к членам структуры

Для доступа к члену структуры используется оператор доступа к члену (.). Он записывается как точка между именем переменной структуры и именем члена. Ключевое слово struct используется для объявления переменных структурного типа. Пример:

Live Demo
#include <iostream>
#include <cstring>
using namespace std;
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1; // объявление Book1 типа Book
    struct Books Book2; // объявление Book2 типа Book
    // спецификация книги 1
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // спецификация книги 2
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // вывод информации о Book1
    cout << "Book 1 title : " << Book1.title << endl;
    cout << "Book 1 author : " << Book1.author << endl;
    cout << "Book 1 subject : " << Book1.subject << endl;
    cout << "Book 1 id : " << Book1.book_id << endl;
    // вывод информации о Book2
    cout << "Book 2 title : " << Book2.title << endl;
    cout << "Book 2 author : " << Book2.author << endl;
    cout << "Book 2 subject : " << Book2.subject << endl;
    cout << "Book 2 id : " << Book2.book_id << endl;
    return 0;
}

Результат:

Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700

Структуры как аргументы функций

Структуру можно передать в функцию аналогично другим переменным или указателям. Доступ к членам осуществляется так же:

Live Demo
#include <iostream>
#include <cstring>
using namespace std;
void printBook(struct Books book);
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1, Book2;
    // книга 1
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // книга 2
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // печать
    printBook(Book1);
    printBook(Book2);
    return 0;
}
void printBook(struct Books book) {
    cout << "Book title : " << book.title << endl;
    cout << "Book author : " << book.author << endl;
    cout << "Book subject : " << book.subject << endl;
    cout << "Book id : " << book.book_id << endl;
}

Результат аналогичен предыдущему.

Указатели на структуры

Указатели на структуры определяются похоже на указатели на другие переменные:

struct Books *struct_pointer;

Адрес структурной переменной сохраняется в указателе через оператор &:

struct_pointer = &Book1;

Для доступа к членам через указатель используется оператор ->:

struct_pointer->title;

Перепишем пример с указателем на структуру:

Live Demo
#include <iostream>
#include <cstring>
using namespace std;
void printBook(struct Books *book);
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1, Book2;
    // Книга 1
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // Книга 2
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // печать, передача адреса
    printBook(&Book1);
    printBook(&Book2);
    return 0;
}
void printBook(struct Books *book) {
    cout << "Book title : " << book->title << endl;
    cout << "Book author : " << book->author << endl;
    cout << "Book subject : " << book->subject << endl;
    cout << "Book id : " << book->book_id << endl;
}

Результат тот же.

Ключевое слово typedef

Существует более простой способ определять структуры или создавать псевдонимы типов. Например:

typedef struct {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Books;

Теперь можно использовать Books напрямую для объявления переменных без ключевого слова struct:

Books Book1, Book2;

typedef работает и для не-структур:

typedef long int *pint32;
pint32 x, y, z;

x, y, z — все указатели на long int.

Язык C

  1. Понимание типов данных C++: основы, модификаторы и лучшие практики
  2. Освоение операторов C++: полное руководство с практическими примерами
  3. Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
  4. Тип данных char в C++: объявление, ASCII и методы преобразования
  5. Революция в хранилищах данных: магнитные наноструктуры с мантиями невидимости нового поколения
  6. Структуры данных в Java: основные классы и Collections Framework
  7. Структуры в C (struct): определение, инициализация, передача в функции, указатели и битовые поля
  8. typedef в C: создание псевдонимов типов, упрощение кода и отличия от #define
  9. Структуры данных в C++: массивы, структуры и эффективное программирование
  10. Абстракция данных в C++: разделение интерфейса и реализации