Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ЭУМКД КИТ-ч1-Бутов.docx
Скачиваний:
9
Добавлен:
05.05.2019
Размер:
262.85 Кб
Скачать

Тема 9. Структуры

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

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

struct point

{

int x, y;

char color[20];

};

где point – это имя структуры.

Имена полей структуры, а также ее имя могут совпадать с именами обычных переменных программы, т.к. они всегда различимы по контексту. Более того, одни и те же имена полей могут встречаться в разных структурах.

Объявив структуру, мы, тем самым, создаем новый, составной тип данных, который далее можно использовать обычным образом, например, запись:

struct point A, B, C;

с точки зрения синтаксиса аналогична записи:

int a, b, c;

и описывает 3 переменные структурного типа с именами A, B, C. Одновременно можно выполнить инициализацию полей структур:

struct point A = {50, 50, “Red”}, B, C = {100, 100, “Green”};

Можно совместить объявление структуры с описанием переменных структурного типа:

struct point

{

int x, y;

chat color[20];

} A = {50, 50, “Red”}, B, C;

Более того, если кроме A, B и C нам больше не нужны переменные этого типа, то имя point можно опустить.

Доступ к отдельному полю структуры выполняется посредством конструкции вида:

ИмяСтруктуры.ИмяПоля

Например, введем с клавиатуры данные в поля структуры B, а затем выведем эти данные на экран:

scanf("%d%d%s", &B.x, &B.y, &B.color);

printf("(%d, %d) %s", B.x, B.y, B.color);

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

УказательНаСтруктуру->ИмяПоля

Например:

struct point *p;

p = &B;

scanf("%d%d%s", &p->x, &p->y, &p->color);

printf("(%d, %d) %s\n", p->x, p->y, p->color);

Если членом структуры является другая структура, то доступ к ее членам выполняется с помощью двух операций точечного выбора:

struct rect //задает прямоугольник, стороны которого ||-ы осям координат

{ // pt1 и pt2 – угловые точки, лежащие на диагонали прямоугольника

struct point pt1;

struct point pt2;

} R;

R.pt1.x = R.pt1.y = 50;

R.pt1.color = “Red”;

R.pt2.x = R.pt2.y = 100;

R.pt2.color = “Green”;

Массивы структур

В практике программирования большое распространение получили массивы структур, т.е. массивы, элементами которых являются переменные структурного типа. Например, оператор

struct point mas[3];

описывает массив, состоящий из трех элементов типа struct point. Описание можно дополнить инициализацией:

struct point mas[ ] = {{10, 10, “Red”}, {20, 20, “Green”}, {30, 30, “Blue”}};

Если инициализаторы – простые константы или строки символов, и все они имеются в наличии, во внутренних скобках нет необходимости:

struct point mas[ ] = {10, 10, “Red”, 20, 20, “Green”, 30, 30, “Blue”};

Ввод данных в массив структур с клавиатуры и вывод их на экран можно выполнить следующим образом:

int i;

for(i=0; i<3; i++)

{

scanf(“%d%d%s”, &mas[i].x, &mas[i].y, &mas[i].color);

printf("(%d, %d) %s", mas[i].x, mas[i].y, mas[i].color);

}

То же самое с использованием механизма указателей:

struct point *p;

p = mas;

for(i=0; i<3; i++)

{

scanf("%d%d%s", &(p+i)->x, &(p+i)->y, &(p+i)->color);

printf("(%d, %d) %s", (p+i)->x, (p+i)->y, (p+i)->color);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]