Главная » Статьи » Програмування » C [ Добавить статью ]

RUS Уроки по программированию на языке С (Структура. Определение структур.)

Структура. Определение структур.

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

Структура - это множество, состоящее из одного или более объектов, возможно имеющих различные типы, объединенных под одним именем.

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

Рассмотрим особенности работы со структурами на примере.

#include <iostream>
using namespace std;
/* 
Создание пользовательского типа данных
(структуры) для хранения даты.
Все данные касающиеся одного объекта 
собраны вместе.
*/
struct date
{
 int day; //день
 int month; //месяц
 int year;//год
 int weekday; //день недели
 char mon_name[15];// название месяца
};

void main(){

 //создание объекта с типом date и инициализация его при создании
 date my_birthday={20,7,1981,1,"July"};

 // показ содержимого объекта на экран
 // обращение к отдельному члену структуры производится через
 // оператор точка (.)
 cout<<"________________MY BIRTHDAY____________________\n\n";
 cout<<"DAY "<<my_birthday.day<<"\n\n";
 cout<<"MONTH "<<my_birthday.month<<"\n\n";
 cout<<"YEAR "<<my_birthday.year<<"\n\n";
 cout<<"WEEK DAY "<<my_birthday.weekday<<"\n\n";
 cout<<"MONTH NAME "<<my_birthday.mon_name<<"\n\n";

 // Создание пустого объекта и заполнение его с клавиатуры
 date your_birthday;

 cout<<"DAY ? ";
 cin>>your_birthday.day;
 cout<<"MONTH ?";
 cin>>your_birthday.month;
 cout<<"YEAR ?";
 cin>>your_birthday.year;
 cout<<"WEEK DAY ?";
 cin>>your_birthday.weekday;
 cout<<"MONTH NAME ?";
 cin>>your_birthday.mon_name;

 cout<<"________________YOUR BIRTHDAY____________________\n\n";
 cout<<"DAY "<<your_birthday.day<<"\n\n";
 cout<<"MONTH "<<your_birthday.month<<"\n\n";
 cout<<"YEAR "<<your_birthday.year<<"\n\n";
 cout<<"WEEK DAY "<<your_birthday.weekday<<"\n\n";
 cout<<"MONTH NAME "<<your_birthday.mon_name<<"\n\n";

}
Особенности структур.

1. Описание структуры начинается со служебного слова struct, за которым может следовать необязательное имя, называемое именем типа структуры (здесь это date). Это имя типа структуры используется в дальнейшем для создания конкретного объекта.

2. За именем типа структуры идет заключенный в фигурные скобки список элементов структуры, с описанием типа каждого элемента (элементом структуры может быть переменная, массив или структура). Элементы структуры отделяются друг от друга точкой с запятой. Например:

struct date
{
 int day;
 int month;
 int year;
 int yearday;
 char mon_name[5];
};

3. За правой фигурной скобкой, закрывающей список элементов, может следовать список объектов. Например, оператор struct date {...} x,y,z; определяет переменные x,y,z в качестве структур описанного типа и приводит к выделению памяти.

Изобразим распределение памяти для структуры x типа date:

4. Описание структуры, за которым не следует список объектов, не приводит к выделению памяти (как в программе выше); оно только определяет шаблон (форму) структуры. Однако, если такое описание снабжено именем типа (например, date), то это имя типа может быть использовано позднее при определении объектов структур (определение структур your_birthday и my_birthday в программе).

5. Структуру можно инициализировать, поместив вслед за ее определением список инициализаторов для ее компонент, заключенный в фигурные скобки. В программе таким образом инициализирована структура my_birthday.

date my_birthday={20,7,1981,1,"July"};

6. Обращение к определенному члену структуры производится с помощью конструкции вида:

<имя структуры>.<имя элемента>

7. Структуры могут вкладываться одна в другую, но самовложение структур запрещено!

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

struct date
{
 int day; // День.
 char month[10]; // Месяц.
 int year; // Год.
};

struct person
{
 char name[namesize]; // Имя, фамилия, отчество.
 char address[adrsize]; // Домашний адрес.
 int zipcode[2]; // Почтовый индекс.
 int s_number [2]; // Код соц.обеспечения.
 int salary[4]; // Зарплата.
 date birthdate; // Дата рождения.
 date hiredate; // Дата поступления на работу.
};

Структура person содержит две структуры типа date и наша программа должна содержать шаблон для структуры date.

Если определить переменную Nick следующим образом:

struct person Nick;

то Nick.birthdate.month будет обозначать месяц рождения. Операция доступа к элементу структуры "." вычисляется слева направо.

А, теперь, рассмотрев основы, перейдем к тому, что же можно делать со структурами. Для этого открываем следующий раздел данного урока.


Категория: C | Добавил: DEN-SHP (05.11.2012)
Просмотров: 833 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]