Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_8.doc
Скачиваний:
5
Добавлен:
05.12.2018
Размер:
93.7 Кб
Скачать

Лекція № 8

Лекція № 8 структури в мові програмування с

Структура - це набір з однієї або більше змінних, можливо різних типів, згрупованих під одним ім'ям для зручності обробки. (У деяких мовах, наприклад Паскаль, структури називаються “записами”).

Розглянемо приклад. Уявіть собі, що на календарі сьогодні 1 січня 2009 року. Дата складається з складових таких, як день, рік та назва місяця. Ці три змінні можна об’єднати в одну структуру вигляду:

struct DATE {

int day;

Int year;

char mon_name[4];

};

Опис структури, що складається з взятого в фігурні дужки списку полів, починається з ключового слова struct. Після слова struct пишеться ім'я, так звана Мітка структури (тут це DATE). Ім’я може бути відсутнє. Така мітка іменує структури цього виду і може використовуватися надалі як скорочений запис детального опису. Елементи або змінні, згадані в структурі, називаються членами (полями, компонентами). Мітки і члени структур можуть мати такі ж імена, що і звичайні змінні (тобто ті, що не є членами структур), оскільки їх імена завжди можна розрізнити по контексту. Звичайно однакові імена присвоюють тільки тісно пов'язаним об'єктам.

Точно так само, як у разі будь-якого іншого базового типу, за правою фігурною дужкою, що закриває список членів, може записуватись список змінних.

Оператор

struct { } x, y, z; // описує struct { }

синтаксично аналогічний

Int X, y, z; // описує int

в тому сенсі, що кожен з операторів описує x, y та z в якості змінних відповідних типів і приводить до виділення для них пам’яті.

Опис структури, за яким не має списку змінних, не приводить до виділення пам'яті (немає змінної); він тільки визначає шаблон або форму структури. Але, якщо в такому опису є мітка, то ця мітка може бути використана пізніше при визначенні фактичних примірників структур. Наприклад, якщо дано приведений вище опис Date, то struct DATE d; визначає змінну d як структура типу Date.

Операція вказівника на член структури "." зв'язує ім'я структури та ім'я члена. Наприклад:

d.day = 1;

d.year = 2000;

d.mon_name = “січ”;

В програмі це може бути реалізовано наступним чином.

#include <stdio.h>

#include <string.h> // для strcpy()

struct DATE {

int day;

Int year;

char mon_name[4];

};

int main(void)

{

struct DATE d;

// заповнимо структуру датою 1 січня 2000 року

d.day = 1;

d.year = 2000;

strcpy(d.mon_name, “січ”);

// виведемо на екран монітора цю дату

printf(“\nDate - %d %s %d\n”, d.day, d.mon_name, d.year);

return 0;

}

Результатом виконання програми буде напис : Date - 1 січ 2000.

Структури можуть бути вкладеними. Для прикладу наведемо структуру STUDENT:

struct STUDENT {

char name[25];

char address[40];

long int zipcode; // поштовий индекс

long int st_number; // номер студ. квитка

double scholarship; // стипендія

int course; // курс

char group[7]; // група

struct DATE birthdate; // дата народження

struct DATE heredate; // дата вступу в університет

};

Структура STUDENT містить дві структури типа DATE . Якщо ми визначимо person як struct  STUDENT person, то запис person.birthdate.year буде зсилатися на рік народження студента.

Над змінною структури можна виконати операції взяття адреси змінної та присвоєння її вказівнику.

struct DATE d1, *d2; //оголошено змінну типу DATE d1,та вказівник на тип DATE d2

d2 = &d1; // &d1 - взяття адреси змінної d1 та присвоєння його змінній d2

Для демонстрації прикладу використання цих операцій над структурами перепишемо наведену вище програму так, щоб ввід даних про дату відбувався в фунrції input_date(), а вивід в процедурі print_date(). В такому випадку наша програма набире наступного вигляду:

#include <stdio.h>

#include <string.h> // для strcpy()

struct DATE {

int day;

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