Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР14-С++-24-мая-2012.doc
Скачиваний:
34
Добавлен:
23.09.2019
Размер:
2.26 Mб
Скачать

1.7. Доступ к значениям полей структурного типа

Правила работы с полями структуры идентичны работе с переменными соответствующих типов.

Доступ к значениям полей структурного типа осуществляется с помощью операции точка:

Имя_переменной_структурного_типа . имя_поля

или с помощью указателя на структуру:

указатель_на_структуру–>имя_поля

Операция точка в данных конструкциях означает доступ к элементу структуры, у нее самый высокий приоритет операций (см. лабораторную работу № 6).

Примеры обращения к полям:

d[i].year, (*(d+i)).year, (p+i)->year

Пример 14.4

#include <stdio.h>

struct cd_info

{ char titlel[25]; // название

char artist[20]; // исполнитель

int num_songs; // число песен

float price; // стоимость

char date_bought[8]; // дата покупки

};

cd_info cd={"Red Moon Men",

"Sam and the Snuds",

12,

11.95,

"02.13.12"};

void main()

{

// вывод содержимого переменной cd

printf("Название: %s\n",cd.titlel);

printf("Исполнитель: %s\n",cd.artist);

printf("Количество песен: %d\n",cd.num_songs);

printf("Стоимость:%5.2f\n",cd.price);

printf("Дата покупки %s\n", cd.date_bought);

}

Пример 14.41

Задание данных для структуры, задающей дату года:

data.day = 12; // элементу, определяющему день месяца,

//присвоено значение 12

data.month = 9; // элементу, определяющему месяц года

//присвоено значение 9

data.year = 2002; // элементу, определяющему год

//присвоено значение 2002

Пример 14.42

Массив с элементами структурного типа student, задающий информацию о студентах группы из 25 человек:

stud [1].namestud.fam = “Иванов”; // элементу,

//определяющему фамилию студента с номером 1

// в массиве stud присвоено значение строки “Иванов”

stud [1].namestud.name = “Алексей”; // элементу,

//определяющему имя студента с номером 1 в

//массиве stud присвоено значение строки “Алексей”

stud [1].age = 19; // элементу, определяющему возраст

//студента с номером 1 в массиве stud присвоено

//значение 19

stud [1].mark[4] = 5; // элементу, определяющему оценку

//по пятому предмету студента с номером 1 в

// массиве stud присвоено значение 5

Пример 14.43

Следующие операторы присваивают значения различным элементам переменной с именем worker типа employee;

worker.employee_id = 12345;

worker.salary = 25000.00;

worker.оffice_number = 102;

Пример 15.45

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

Следующая программа иллюстрирует использование структуры типа employee:

#include <iostream.h>

#include <string.h>

void main(void)

{

    struct employee

   {

      char name [64]; //ФИО

      long employee_id; //табельный номер

      float salary; //оклад

      char phone[11]; //номер телефона

      int office_number; //номер структурного подразделения

   } worker;

// Копировать имя в строку strcpy(worker.name, "Петров Иван Сергеевич");

   worker.employee_id = 12345;

   worker.salary = 25000.00;

   worker.office_number = 102;

// Копировать номер телефона в строку strcpy(worker.phone, "84957691212") ;

   cout << "Служащий: " << worker.name << endl;

   cout << "Телефон: " << worker.phone << endl;

   cout << "Номер служащего: " << worker.employee_id << endl;

   cout << "Оклад: " << worker.salary << endl;

   cout << "Офис: " << worker.office_number << endl;

}

Как видите, присваивание целому элементу и элементу с плавающей точкой очень просто. Программа использует оператор присваивания, чтобы присвоить значение соответствующему элементу. Однако обратите внимание на использование функции strcpy для копирования символьной строки в элементы name и phone. Если вы не инициализируете элементы при объявлении переменной типа данной структуры, вы должны копировать символьные строки в символьно-строковые элементы.

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

указатель_на_структуру->имя_элемента.

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

Пример 14.122

Описание указателя на структуру и обращение к ее элементам.

data * ptr;

ptr=&d2;

ptr->day=4;

ptr->month=" Декабрь";

ptr->year=1998;

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

(*ptr).day=4;

(*ptr).month=" Декабрь";

(*ptr).year=1998;