Структуры в языке C — это специальные большие перменные, которые содержат внутри себя несколько именнованых переменных. Структуры так же являются базовой основой для объектов и классов в C++.
Структуры используются для:
- сериализация данных;
- передача множественных аргументов в и из фукнции через один аргумент;
- структуры данных, такие как свзанные списки, двиочные деревья и другое.
Базовый пример структуры:
struct point { int x; int y; };
Мы создаём структуру с именем point
, которая содержит две переменных — x
и y
.
Теперь, попробуем использовать её. Предположим, у нас есть функция draw()
, которая рисует точку на экране.
Без структуры нам понадобится использовать два аргумента — по одному для каждой координаты:
#include <stdio.h> int main() { int x = 1; int y = 2; draw(x, y); return 0; }
Используя структуры — мы можем передать координаты в виде одного аргумента:
#include <stdio.h> int main() { struct point p; p.x = 10; p.y = 5; draw(p); return 0; }
Для доступа к переменным структуры используется оператор «.
«.
Содержание
Печать из структур
Используем такой код:
#include <stdio.h> struct st { // создаём структуру st; int a; // и определяем две переменные в ней; int b; }; int main() { struct st o; // объявляем структуру st, как переменную o; o.a = 1; // инициализируем перменную a структуры st, и задаём ей значение 1; o.b = 2; printf("A: %d, B: %dn" , o.a, o.b); // выводим на экран переменные структуры; return 0; }
Результат:
$ ./struct_1 A: 1, B: 2
Определение типов
Определение типов (typedef
) позволяет задавать новые имена различным типам данных (не только структур), что может быть полезным при работе со структурами и указателями.
Так мы можем избавиться от длинного определения структуры point
, которую мы создали ранее. Что бы не использовать ключевое слово struct
каждый раз, когда мы хотим определить новую структуру point
— можно использовать такой код:
typedef struct { int x; int y; } point;
Он позволит нам выполнить объявление новой структуры так:
point p;
Структуры так же могут содержать указатели, что позволяет хранить строки или указатели на другие структуры.
Например, мы можем определить структуру st
так:
typedef struct { char * a; int b; } st;
Так как a
— указатель типа char
, тип st
может содержать строку.
Изменим наш предыдущий код:
#include <stdio.h> /* struct st { int a; int b; }; */ typedef struct { char * a; int b; } st; int main() { st o; // struct st o; o.a = "word"; // o.a = 1; o.b = 2; printf("A: %s, B: %dn" , o.a, o.b); return 0; }
По теме