Пример.
Поля записи | |||||
Запись | Fio | Adresss | Age | Oc | Sr |
Типы полей | Строка | Строка | Целое | Массив целочис. | Вещ. |
Структуры С и С++
В С и С++ запись - встроенный тип struct (структура)
Описание структуры
Описание шаблона структуры
Описание структурной переменной
Синтаксис описания шаблона структуры:
struct <имя_ шаблона>
{
<тип1> <имя_поля1>;
<тип2> <имя_поля2>;
…
<типN> <имя_поляN>;
};
где <тип1>, <тип2>, …,<типN> - любые основные типы (int, char, float, и т. д.), массив, указатель, структура, объединение.
Пример:
struct Student
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
};
Синтаксис описания структурной переменной:
struct <имя_шаблона> <имя_переменной>;
Или
struct <имя_шаблона> <список имен переменных>;
Примеры:
struct Student S;
struct Student S, S1, S2;
Определение объема памяти, выделяемой под структурную переменную:
sizeof (struct <имя_шалона>);
Пример:
sizeof (struct Student); // 56 байт
Совмещение описания шаблона структуры и структурной переменной
Синтаксис описания:
struct <имя_ шаблона>
{
<тип1> <имя_поля1>;
<тип2> <имя_поля2>;
…
<типN> <имя_поляN>;
} <имя_переменной>; // или <список имен переменных>;
Пример:
Struct Student
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
} S, S1; // Структурные переменные S, S1
Совмещение описания шаблона, описания структурных переменных и инициализации полей в одном предложении
Пример:
struct Student // Описание структуры
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
}
S, S1, S2={ "Рыбкин", // Описание переменных S,S1,S2
"Река Сож", // и инициализация полей S2
1988,
{5,4,5,4},
};
Использование описания пользовательского (собственного) типа данных для описания структуры
Описание пользовательского типа
Описание переменных
Синтаксис описания:
typedef <описание типа> <имя_типа>;
<имя_типа> <имя_переменной или список имен переменных>;
Пример:
typedef struct Student
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
} My_Student; // Имя собственного типа
My_Student S, S1, S2={ "Рыбкин",
"Река Сож",
1988,
{5,4,5,4},
};
Доступ к отдельным полям структурной переменной.
• - операция выбора или ссылки на поле (обычная точка)
<имя_структурной_переменной>•<имя_поля> - составное имя
Примеры:
S.fio, S.Adress, S.Age, S.oc[0], S.oc[i]
/* Вложенные структуры. Описание. Обращение к полям */
Описание вкладываемой структуры
Описание вложенной структуры и структурных переменных
Пример:
struct fios // Описание вкладываемой структуры
{ char *f,*im,*ot; };
typedef struct Student // Описание собственного типа MY_Student
{ struct fios fio; // Фамилия - структура
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средняя успеваемость - вещественное
} MY_Student;
MY_Student S,S1, S2={
{"Рыбкин", "Сом", "Язевич"},
"Река Сож",
1988,
{5,4,5,4},
};
Примеры обращения к полям:
S.fio.f, S.fio.im, S.fio.ot, S.fio, S.Adress, S.Age, S.oc[2], S.oc[i]
/* Структурные переменные и указатели */
Синтаксис описания указателя:
<тип>*<имя_переменной>;
-> - операция доступа к полям структурной переменной через указатель(минус больше)
Пример:
typedef struct Student
{ char fio[30]; // Фамилия - строка
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средняя успеваемость - вещественное
} MY_Student;
MY_Student *S3, // Указатель на структуру
S4; // Структурная переменная
Примеры обращения к полям:
S3->Age, S3->oc[0], S3->oc[i], S3->fio, S4.oc[3]
Массивы структурных переменных
Описание массива структур не отличается от описания массива обычных переменных.
Пример:
Struct Man
{
char fio[31]; // ФИО
int year; // Год рождения
float pay; // Оклад
};
Man d[100], *p=d; // массив структур из 100 элементов и
// указатель, инициализированный адресом
//первого элемента массива
Примеры обращения к полям:
d[i].year, (*(d+i)).year, (d+i)->year
/* Примеры программ работы со структурами */
Пример 1.
#include <stdio.h>
Main()
{
/* Описание шаблона структуры */
struct Student
{ char *fio; // Фамилия - указатель на char
char Adress[40]; // Адрес - строка
int Age; // Возраст - целое
int oc[4]; // Оценки - целочис. массив
float sr; // Средний балл - вещественное
};
struct Student S; // Описание структурной переменной S
int i;
float sr;
S.fio="Петушков"; //Присваивание полю значения
printf("Введите адрес студента %sa ",S.fio);
gets(S.Adress); //Ввод значения поля
S.Age=1987;
S.oc[0]=3; S.oc[1]=5; S.oc[2]=4; S.oc[3]= S.oc[2];
sr=0; //Вычисление
for(i=0;i<=3;i++) sr=sr+S.oc[i]; //среднего
sr=sr/4; S.sr=sr; //балла
printf(" Средний балл студента %sа",S.fio);
printf(" %d года рождения,\n проживающего по адресу: %s,",
S.Age,S.Adress);
printf(" равен %5.2f\n",S.sr);
fflush(stdin); getchar();
return(0);
}
Вид экрана после выполнения программы:
Введите адрес студента Петушковa ул. Солнечная, д.1, кв. 4