Лекции по проге / 14_Типы данных, определяемые пользователем
.pdf
Пример инициализации переменныхструктур
struct student Iam = {"Иванов И.И.", 1, 99.9};
struct student_ext other =
{
"Петров А.П.", 1, 21.0, |
|
{ // массив subjects |
|
{"Физика", 12}, |
// предмет 1 |
{"Программирование", 30} |
// предмет 2 |
} |
|
}; |
|
21
Операции над структурами
= |
операция присваивания |
. -> |
обращение к полю структуры |
●Структуру можно присвоить другой структуре того же типа; при этом происходит поэлементное копирование данных
22
Обращение к полю структуры
<переменная-структура>.<имя поля> <указатель на структуру> -> <имя поля>
●Операция обращения к полю структуры возвращает l-value выражение, т.е. полю структуры можно присваивать значения
23
Обращение к полю структуры в общем случае
<выражение 1>.<имя поля> <выражение 2> -> <имя поля>
где
<выражение 1> — выражение, возвращающее структуру,
<выражение 2> — выражение, возвращающее указатель на структуру
24
Примеры обращения к полю структуры
struct student |
|
|
{ |
|
|
char |
FIO[41]; |
// ФИО |
int |
course; |
// номер курса |
float |
avg_rating; |
// средний рейтинг |
} |
|
|
students[10];
●Обращение к полю структуры, которая является элементом массива
|
strcpy(students[0].FIO, "Петров А.П."); |
|||
|
|
|
имя поля структуры |
|
25 |
|
|
|
|
|
выражение, возвращающее структуру |
|||
Примеры обращения к полю структуры
struct student_ext |
|
|
{ |
|
|
char |
FIO[41]; |
// ФИО |
struct |
|
|
{ |
|
|
char name[36]; |
// название предмета |
|
int |
grade; |
// оценка |
}subjects[2];
}Iam;
●Обращение к полю структуры, которая является полем другой структуры
Iam.subjects[1].grade = 99; |
|
||
имя поля структуры |
|||
|
|
|
|
26 |
выражение, возвращающее структуру |
Примеры обращения к полю структуры
struct student |
|
|
{ |
|
|
char |
FIO[41]; |
// ФИО |
int |
course; |
// номер курса |
float |
avg_rating; |
// средний рейтинг |
};
struct student *getStudent(int group, int index);
●Обращение к полю структуры, указатель на которую возвращается из функции
|
getStudent(160,i)->course += 1; |
|||
|
|
|
|
|
27 |
|
|
имя поля структуры |
|
|
|
|
||
|
выражение, возвращающее указатель на структуру |
|||
Задание
● Увеличить на единицу курс студента Iam
●Напечатать на экране фамилию студента Iam
●У студента other задать первым предметом философию и рейтинг равный 100 баллов
●Напечатать на экране фамилию и средний рейтинг студента topStudent, имеющего лучшие показатели успеваемости
28
Пример обращения к полям структуры
Iam.course++; /* у операции "точка" приоритет выше, чем у операции ++ */
puts( Iam.FIO );
strcpy( other.subjects[0].name, "Философия");
other.subjects[0].grade = 100;
printf("%s %f", topStudent->FIO, topStudent->avg_rating);
29
Задание
Напечатать на экране фамилию и средний рейтинг студента topStudent, имеющего лучшие показатели успеваемости, используя операцию "точка"
30
