Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.01.2021
Размер:
12.3 Кб
Скачать

Інформатика — Теорія — Оголошення структури    Автори

|

Контакти

|

Підсистема допомоги

|

Методичні вказівки

|

Анотація

|

Назад

   ІнформатикаСтруктури : Оголошення структуриЗміст курсу

Вступ

Теорія

Оголошення структури

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

Практика

Практичне заняття

Лабораторна робота

Поточна перевірка знань

Використання структур

Висновки

Версія для друку

  Оголошення структури      Структури дозволяють об'єднувати в єдиному об'єкті сукупність значень, які можуть мати різні типи. Оголошення структури здійснюється за допомогою ключового слова struct. Синтаксис опису структури виглядає так :struct [імя_структури]

{

     тип_1 імя_поля_1;

     тип_2 імя_поля_2;

     ...;

     тип_n імя_поля_n;

};

де імя_структури - ім'я структури шаблону, що задовольняє правилам завдання ідентифікаторів мови C++;

тип_1, тип_2,..., тип_n - будь-які призначені типи;

імя_поля_1,..., імя_поля_n - ідентифікатори полів, що задовольняють правилам завдання ідентифікаторів.

     З метою ознайомлення з цим типом даних розглянемо найпростіший приклад представлення поняття "дата", що складається з декількох частин: число (день, місяць, рік), назва тижня та місяця:struct date

{      int day ;      int month ;     int year;     char day_name[15];     char mon_name[14];} arr[100],*pd,data,new_data;     В даному прикладі оголошуються:data, new_data - змінні типу структури date; pd - покажчик на тип data;arr - масив із 100 елементів, кожний елемент якого має тип date.Можливий і наступний опис структури з використанням typedef:typedef struct mystruct

{      int year;     char size;     float field; } MYSTRUCT;MYSTRUCT s;      /* те саме, що й struct mystruct s; */

     Потрібно відзначити, що на відміну від описів інших типів даних, опис структури не виділяє місця у пам'яті під елементи структури. Її опис визначає лише так званий шаблон, що описує характеристики змінних, що будуть розміщуватися у конкретній структурі. Щоб ввести змінні та зарезервувати для них пам'ять необхідно або після фігурної дужки, що завершує опис структури, вказати список ідентифікаторів, як це зроблено у вищенаведеному прикладі, або окремо оголосити змінні типу, як ми це робимо у звичайних випадках.      Доступ до полів структурних змінних можна забезпечити двома засобами.

1.Використовуючи оператор разіменування:

імя _структурної_змінної. імя_поля.

2.Використовуючи оператор покажчика на структуру:

покажчик_на_структуру-> імя_поля.

Наприклад,struct mystruct

{     int i;     char str[21];     double d;} s,*sptr=&s;s.i =3; sptr->d = 1.23;     Ініціалізація структури подібна до тієї, що у масивах, але з урахуванням розміщення даних різного типу. struct person

{     char frnm[20];     char nm[30];     int year;     char s;};

person poet={"Taras", "Shevtchenko",1814, 'M'},

classics[]={{"Alfred", "Aho", 1939, 'M'},

     {"Seimour", "Ginzburg"},

     {"Jeffrey", "Ulman", 1938, 'M'}};     У вищенаведеному прикладі ініціалізується змінна poet і масив структур classics. Значення classics[1].year і classics[1].s мають значення відповідно 0 і '\0'.     Для змінних одного і того ж самого структурного типу визначена операція присвоювання, при цьому здійснюється поелементне копіювання значень полів.struct date

{     int day ;      int month ;     int year;     char day_name[15];     char mon_name[14];} data,new_data;/* ... */data=new_data;Але, для порівняння структур необхідно перевіряти рівність відповідних полів цих структур окремо. struct point {     float x,y;     char c;} point1,point2;if ((point1.x==point2.x)&&(point1.y==point2.y)&&(point1.c==point2.c)) { /* … */ };     Кожний опис структури вводить унікальний тип структури, тому в наступному фрагменті програми:struct A

{     int i,j;     double d;} a, a1;struct B

{     int i,j;     double d;} b;об'єкти a і a1 мають однаковий тип struct A, але об'єкти a і b мають різні типи структури.      Структурам можна виконувати присвоювання тільки в тому випадку якщо і вихідна структура, і структура, які присвоюється мають один і той же тип.a = a1;      //можна виконати, так як a і a1 мають однаковий тип a = b;      // помилка

Приклад 1. Введення і виведення змінної типа структура. #include<iostream.h>struct book {     char title[45];     char author[30];     float value;};void main() {     book libry;     cout<<"Введiть назву книги.\n";     cin>>libry.title;     cout<<"Тепер введiть прiзвище автора.\n";     cin>>libry.author;     cout<<"Тепер введiть цiну.\n";     cin>>libry.value;     cout<<"\n"<<libry.author <<" "<<libry.title<<" "<<libry.value;

}

 © 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS

Соседние файлы в папке content