- •Введение
- •Достоинства и недостатки языка c
- •Типы данных в с
- •Модификаторы
- •Константы
- •Арифметические операции
- •Логические операции
- •Оператор присваивания
- •Организация множественных выражений
- •Комбинированные операции
- •Локальные и глобальные объекты
- •Модификатор extern
- •Статические и динамические объекты
- •Регистровые переменные
- •Описание неизменяемых объектов
- •Указатели
- •Явное преобразование типа
- •Оператор if
- •Операторы циклов Оператор while
- •Оператор do ... While
- •Оператор for
- •Оператор switch (переключатель)
- •Операторы передачи управления
- •Прототипы функций
- •Передача данных в функцию
- •Структуры и определения типов пользователя
- •Битовые поля
- •Объединения
- •Псевдофункция sizeof
- •Основные директивы препроцессора
- •Основные директивы условной компиляции
- •Дополнительные данные по Turbo-c
- •Организация памяти на машинах класса pc. Виды указателей
- •Работа с указателями на функцию
- •Основные регистры общего назначения процессора
- •Модели памяти
- •Использование стека
- •Организация прерываний в программе. Модификатор volatile
- •Порядок передачи данных в функцию. Модификатор pascal
- •Передача данных в программу. Функция main
- •Разбор типовых ошибок и недочетов при программировании
- •Некоторые функции библиотеки Turbo-c
- •Функции работы с оперативной памятью эвм
- •Функции работы с клавиатурой
- •Работа с дисплеем в символьном режиме
- •Работа с дисплеем в графическом режиме
- •Функции работы с дисками
- •Функции работы с временными интервалами и звуком
- •Функции преобразования данных
- •Функции работы со строками
- •Математические функции
- •Функции работы с файлами и каталогами
- •Функции работы со временем и датой
- •Функции процессов
- •Функции работы с портами машины
- •Интерфейс с дос
- •Задачи на практические занятия
- •Литература
- •Оглавление
Структуры и определения типов пользователя
Структура - это объединение элементов различного типа.
Общая форма описания:
struct <тег или список>
{
элементы структуры
. . .
}
<список символических имен>;
Здесь тег или список символических имен может отсутствовать.
Примечание: Можно также описать тип, являющийся типом структуры или одного из стандартных типов. Это можно сделать следующим образом:
typedef struct
{
элементы структуры
. . .
}
<тег или список>;
или
typedef <один из стандартных типов> <тег или список>;
В качестве элементов списка здесь могут быть использованы указатели.
Примеры:
1. Описание типа экрана
a.
typedef struct
{
int x_min,x_max; /* измерения экрана по горизонтали */
int y_min,y_max; /* измерения экрана по вертикали */
unsigned char color; /* цветной экран или нет (1/0) */
int x_cur,y_cur; /* положение курсора на экране */
int f_cur; /* форма курсора (его тип) */
} screen;
. . .
screen a,b,c;/* описание объектов типа структуры экрана */
. . .
б.
struct screen
{
int x_min,x_max; /* измерения экрана по горизонтали */
int y_min,y_max; /* измерения экрана по вертикали */
unsigned char color; /* цветной экран или нет (1/0) */
int x_cur,y_cur; /* положение курсора на экране */
int f_cur; /* форма курсора (его тип) */
} a,b,c; /* описание объектов типа структуры экрана */
в.
struct
{
int x_min,x_max; /* измерения экрана по горизонтали */
int y_min,y_max; /* измерения экрана по вертикали */
unsigned char color; /* цветной экран или нет (1/0) */
int x_cur,y_cur; /* положение курсора на экране */
int f_cur; /* форма курсора (его тип) */
} a,b,c; /* описание объектов типа структуры экрана */
г.
struct screen
{
int x_min,x_max; /* измерения экрана по горизонтали */
int y_min,y_max; /* измерения экрана по вертикали */
unsigned char color; /* цветной экран или нет (1/0) */
int x_cur,y_cur; /* положение курсора на экране */
int f_cur; /* форма курсора (его тип) */
} ;
. . .
/* описание объектов типа структуры экрана */
struct screen a,b,c;
2. Описание типа части записи базы данных по студентам
struct student
{
char family[30]; /* фамилия */
char name[30]; /* имя */
char name_fat[30]; /* отчество */
int year_r; /* год рождения */
char mp[60]; /* место постоянного проживания */
char mr[60]; /* место проживания */
int year_b; /* год поступления */
int n_gr_b; /* номер группы поступления */
char fakultet_b[30]; /* название факультета поступления */
int year_g; /* год начала учебы группы */
int n_gr; /* номер группы */
char fakultet[30]; /* название факультета */
} a5;
3. Описание своего типа
typedef unsigned long u_long; /*тип u_long-unsigned long*/
. . .
u_long x,y,z; /* описание объектов типа u_long */
. . .
Можно также описывать указатели на структуру. При этом обычным образом перед символическим именем объекта ставится *. Инициализируется указатель на структуру оператором присваивания, где в левой части стоит символическое имя объекта, а в правой части - адрес. Например:
struct screen
{
int x_min,x_max; /* измерения экрана по горизонтали */
int y_min,y_max; /* измерения экрана по вертикали */
unsigned char color; /* цветной экран или нет (1/0) */
int x_cur,y_cur; /* положение курсора на экране */
int f_cur; /* форма курсора (его тип) */
} *a,b;
. . .
a=. . .
. . .
При обращении к элементам структуры указывается символическое имя объекта, далее ставится . (в случае, когда описан указатель на структуру, ставится ->). Потом указывается элемент структуры и, если этот элемент является массивом, индексы в квадратных скобках.
Например, для обращения к элементу color объекта с символическим именем b, мы должны использовать b.color, а при обращении к тому же элементу объекта с символическим именем а a->color