Структуры


Структуры C - это особые большие переменные, которые содержат внутри несколько именованных переменных. Структуры являются базовой основой для объектов и классов в C. Структуры используются для:

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

Самый простой пример структур - это точки , которые представляют собой единый объект, содержащий две переменные - xи y. Определим точку:

struct point {
    int x;
    int y;
};

Теперь давайте определим новую точку и воспользуемся ею. Предположим, функция drawполучает точку и рисует ее на экране. Без структур для его использования потребовалось бы два аргумента - каждый для каждой координаты:

/* draws a point at 10, 5 */
int x = 10;
int y = 5;
draw(x, y);

Используя структуры, мы можем передать аргумент точки:

/* draws a point at 10, 5 */
struct point p;
p.x = 10;
p.y = 5;
draw(p);

Для доступа к переменным точки мы используем .оператор точки .

Typedefs

Определения типов позволяют нам определять типы с разными именами, что может пригодиться при работе со структурами и указателями. В этом случае мы бы хотели избавиться от длинного определения точечной структуры. Мы можем использовать следующий синтаксис, чтобы удалять structключевое слово каждый раз, когда мы хотим определить новую точку:

typedef struct {
    int x;
    int y;
} point;

Это позволит нам определить новую точку следующим образом:

point p;

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

typedef struct {
    char * brand;
    int model;
} vehicle;

Поскольку марка является указателем на символ, тип транспортного средства может содержать строку (которая в данном случае указывает марку транспортного средства).

vehicle mycar;
mycar.brand = "Ford";
mycar.model = 2007;

Упражнение

Определите новую структуру данных с именем «person», которая содержит вызываемую строку (указатель на char) nameи вызываемое целое число age.