Структуры в языке 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;
}
По теме
3 831 views