Доступ к значению поля в структуре



ЛАБОРАТОРНАЯ РАБОТА №9

Комбиированный тип - Структура

 

Тип данных –- struct

    Структура – тип определяемый пользователем. Этот тип данных используется для представления в программе объектов, обладающих несколькими свойствами возможно различного типа. Например, объект Книга, может быть определена свойствами: фамилия автора, название книги, год издания, издательство. Структура позволяет представить объект, обладающий несколькими свойствами, одной переменной.

 

Формат определения типа

 

struct ИМЯ

{

    список определений простых полей – переменные и константы любого типа языка;

[список битовых полей – переменные, позволяющие именовать последовательность битов]

}

 

Формат определения простого поля

Простое поле – это переменная или константа. Они определяются по тем же правилам, то и просто переменная и константа.

    спецификатор типа имя поля

Пример определения структуры с простыми полями для хранения данных по служащему: ФИО – строка длиной 20, возраст – целое число целое, пол – символ, количество детей – целое число.

struct Employee

{

    char fio [20];

    unsigned sort age;              //возраст 0..100 – 2байта

    unsigned char sex;             // пол М или Ж -1 байт

    unsigned sort children; // количество детей – 2 байта

};

Employee e;             // e – переменная типа Employee

 

Формат определения списка битовых полей

Используется для более экономного использования памяти. Очень эффективно использовать структуру с битовыми полями в структуре типа uion.

В списке битовых полей могут быть указаны два вида полей:

· Битовое поле;

· Заполнитель.

Формат определения битового поля

спецификатор типа имя типа:количество битов

Формат определения заполнителя

Поле – заполнитель  используется для выравнивания битовых полей на границу определенного бита.

 спецификатор типа : количество битов

Пример определения битовых полей

Организации прямого доступа к трем первым битам, двум битам с номерами, 7 и 8, и четырем старшим битам ячейки типа short.

struct two_byte

{

    unsigned short bit13_14_15:3;

    unsigned short : 4;

    unsigned short bit7_8:2;

    unsigned short : 4;

    unsigned short bit0_1_2:3;

};

two_byte x;              //переменная типа two_byte

 

Правила создания типа struct

1. Имя поля должно быть уникально в пределах одного типа struct.

2. Тип поля – это любой тип языка, включая массивы и структуры Си.

3.Если несколько полей имеют одинаковый тип, то их имена можно перечислить через запятую.

Примеры определения переменных типа struct

1) Для хранения информации о точке на плоскости.

struct point

{

 double x,y;

};

point P;

2) Определение переменной и ее инициализация

struct point

{

 double x,y;

};

point P={0,1};

 

3) Переменная должна хранить фамилию студента и шесть оценок за экзамены в сессию.

struct TSessia

{

    char Fam[40];

    unsigned short marks[6];

};

TSessia S;

TSessia S={“Иванов”,{4, 5, 4, 5, 4, 5};

4) Переменная должна хранить анкетные данные сотрудника: фамилия, дата рождения, адрес.

Дата рождения характеризуется тремя значениями: номер дня, номер месяца, номер года.

Адрес характеризуется значениями: город, улица, номер дома, номер квартиры.

Определим три структуры: Tdate, Tadress, TEmploye

struct Tdate

{

    unsigned short day;

    unsigned short month;

    unsigned short year;

};

struct Tadress

{

    char city[30];

    char street[50];

    unsigned short NumHause, NumRoom;

};

struct Temploye

{

    char Fam[40];

    Tdate Date;

    Tadress Adress;

};

Temploye E;

Temploye   E1={“Иванов”,{1,12,1999},{“Москва”, “ул.Xxxxxx”, 15,20}};

 

Tadress A;

Tdate d;

5) Массив структур. Требуется хранить данные по 40 точкам на плоскости.

Tpoint mas[40];

Пример более экономного использования памяти для размещения переменной

struct emp

{

    char fam[40];

unsigned short age; // возраст

    unsigned short sex; //пол

    unsigned short child; //количество детей

};

emp e;   //для переменной 46 байт

 

Значение возраста до 120 – достаточно 7 бит, для значения пола достаточно одного бита, для количества детей достаточно 5 бит. В итоге всего достаточно 13 бит. Так как память выделяется байтами, то под эти значения достаточно двух байтов.

struct emp

{

    char fam[40];

unsigned short age:7; // возраст

    unsigned short sex:1; //пол

    unsigned short child:5;   //количество детей

    unsigned short:3;

};

emp e; //объем памяти переменной 42 байта

Представление переменной типа struct в памяти

1) Переменная R для представления точки на плоскости

Tpoint R;

   
x y

2) Переменная S типа Tsession

             
Поле Fam

Поле marks-массив

3) Переменная Е типа TEmploye

  day month year city street NumHouse NumRoom
               
Fam

Date

Adress

 

Доступ к значению поля в структуре

Доступ к полю прямой – по имени поля - уточненное имя. Уточненное имя формируется по правилу:

имя переменной.имя поля.

Если имя поля в свою очередь представляет переменную типа запись, то правило распространяется на имя этого поля.

Примеры формирования имени.

1) Имя поля переменной R

Tpoint R;

R.x или R.y

2) Доступ к значению оценки по третьему экзамену в сессию.

TSession S;

S.marks[3]

3) Доступ к значению поля сity переменной E.

TEmploye E;

E.Adress.сity или E.Adress.street

4) Доступ к полю элемента массива.

Tpoint mas[40];

mas[3].x или mas[3].y

5) Доступ к битовым полям

e.age=43;

6) Структура и указатель

TEmploye *e;

Доступ к полю через разыменование. Два способа:.

· явно

              имя поля (*указатель).имя поля

· неявно

              указатель->имя поля

Employee *e2;

int main(int argc, char* argv[])

{         

// способ 1- явное разыменование

       cout<<(*e2).fio;                //скобки (*e2). т.к. операция «точка» имеет                                                          // приоритет выше чем *

       cout<<(*e2).age<<endl;

//способ 2 – неявное разыменование

       cin>>(e2->fio);

       cin>>age;

       e2->age=age;

       cout<<(e2->fio);

       cout<<(e2->age)<<endl;   return 0;

}

 


Дата добавления: 2018-04-05; просмотров: 243; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!