
- •Введение
- •Блок-схема алгоритма
- •Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Основные понятия языка С(С++)
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Структура программы на языке С(С++)
- •Операции и выражения
- •sizeof
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Операторы языка С(С++)
- •Понятие пустого и составного операторов
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Примеры программ
- •Массивы
- •Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Передача массива в функцию
- •inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Вершина стека
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Стек
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Файлы
- •Примеры программ
- •Литература
Указатели на структуры.
Как и для других структурированных типов данных, указатели могут быть использованы и для структур. Это имеет следующие положительные черты:
-указателями на структуры легче пользоваться, чем самими структурами (например, в задаче сортировки);
-ряд данных удобно представлять в виде структур, полями которых являются указатели на другие структуры.
Рассмотрим пример, показывающий, как определять указатель на структуру и использовать его для работы с элементами структуры.
#include <stdio.h>
#define DL 30 // max число символов в строке char
struct name{char fio[DL];}; |
// ФИО объекта |
struct inform{struct name nm; |
// ссылка на стр-ру name |
char prof[DL]; |
// профессия |
int god; |
// год рождения |
float okl;}; |
// оклад |
void main(void) |
|
{static struct inform mas[2]=
{"Иванов","конструктор",1965,15000.50, "Петров","оператор",1967,12350.50};
struct inform *him; |
// указатель на структуру |
printf("адрес mas[0]: %u |
mas[1]: %u \n",&mas[0],&mas[1]); |
him=mas; |
// him содержит адрес mas[0] |
printf("адрес mas[0]: %u |
mas[1]: %u \n",him,him+1); |
printf("him->okl = %.2f |
(*him).okl = %.2f \n",him- >okl, (*him)okl); |
him++; |
// him содержит адрес следующей стр-ры |
printf("him->okl = %.2f |
(*him).okl = %.2f \n",him- >okl, *him).okl); |
++him->okl; |
// увеличение значения поля okl на 1 |
printf("him->okl = %.2f |
(*him).okl = %.2f \n",him- >okl, *him).okl); |
} |
|
Синтаксис, используемый при описании указателя на структуру, такой же, как и для других структурированных данных:
struct имя_структуры * имя_указателя;
Таким образом, раз him - указатель на структуру inform, то *him есть сама структура, а (*him).okl - одно из полей структуры.
В выражении (*him).okl используются скобки, так как приоритет операции (.) выше чем *. Для упрощения доступа к элементам структуры (избежания ошибок, связанных с учетом приоритета) была введена операция -> (операция косвенного получения элемента). Эта операция имеет следующую форму записи:
имя_указателя -> имя_поля_структуры; Этот оператор состоит из двух знаков - и >. Операция -> имеет
наивысший приоритет, наряду с операциями () [ ] и, таким образом, чтобы перейти к полю okl следующей структуры, необходимо записать: