Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2020-05-08 | 174 |
5.00
из
|
Заказать работу |
|
|
Цели:
-научиться создавать и использовать структуры, объединения и перечисления.
-изучить передачу структур в функции по значению и по ссылке.
-научиться создавать битовые поля в структурах.
Характер занятия: репродуктивный.
Форма организации: индивидуальная.
Обеспечение занятия: тетрадь с лекциями, СИ, компьютер.
Требования к знаниям студентов
Перед выполнением практической работы студент должен
знать:
- отличия структуры от массива;
- отличия объединения от структуры и массива;
- отличия перечисления от базовых типов языка;
после выполнения практической работы студент должен
уметь:
- использовать структуры для создания записей данных;
- применять объединения для экономии памяти и сокращения кода программы;
- создавать перечисления и обращаться к его элементам;
- использовать структуры и объединения в качестве параметров функций.
Теоретический материал
Структуры — это наборы (иногда их называют агрегатами) логически связанных переменных, объединенных под одним именем, которые могут состоять из переменных различных типов данных. Структуры часто используются, чтобы определить записи, которые должны сохраняться в файлах, служить базой для создания более сложных структур данных, таких как связанные списки, очереди, стеки и деревья.
Описания структур
Рассмотрим следующее описание структуры:
struct card (char *face; char *suit;
};
Ключевое слово struct определяет структуру. Идентификатор card является именем-этикеткой структуры. Имя-этикетка именует структуру, и используется совместно с ключевым словом struct для объявления переменных типа структуры. В данном примере тип структуры — struct card. Переменные, объявленные внутри скобок структуры, являются элементами структуры.
|
Элементы одной структуры должны иметь уникальные имена, но две различных структуры могут содержать одинаковые имена. Каждое определение структуры должно заканчиваться точкой с запятой.
Элементы структуры могут быть переменными основных типов данных (то есть int, float и т.д.), или агрегатами, такими, как массивы или же другие структуры. Элемент структуры не может быть структурой того же типа, в которой он содержится, но его можно объявить как указатель на тип структуры, в которую он входит, такая структура, называется структурой, ссылающейся на себя.
Определение структуры не резервирует место под элементы структуры в памяти компьютера. Оно просто создает новый тип данных, который можно использовать для объявления переменных. Переменные структуры объявляются так же, как и переменные других типов. Объявление
struct card a, deck[52], *cPtr;
объявляет а — переменную типа struct card, deck — массив из 52 элементов типа struct card и cPtr — указатель на struct card. Можно объявить переменные данной структуры и по-другому:
struct card {
char *face;
char *suit; } a, deck[52], *cPtr;
Имя-этикетка не является для структуры обязательным. Если определение структуры не содержит имя-этикетку, переменные для этой структуры могут быть объявлены только в определении структуры, но не отдельным объявлением.
Следующие операции над структурами являются единственно допустимыми: присваивание переменных-структур переменным того же типа, взятие адреса (&) структуры, обращение к элементам структуры и применение операции sizeof для определения ее размера.
Нельзя сравнивать структуры, поскольку элементы структуры не обязательно хранятся в последовательных байтах памяти.
Инициализация структур
Структуры можно инициализировать, как и массивы, используя список инициализации:
struct card a = {"Three", "Hearts"};
создает переменную а типа struct card (структура определена выше) и присваивает элементу face значение "Three", а элементу suit значение "Hearts".
|
Если инициализаторов в списке меньше, чем элементов в структуре, остальным элементам автоматически присваивается значение 0 (или NULL, если элемент — указатель). Переменным-структурам, объявленным вне определения любой функции (т.е. глобально) присваиваются 0 или NULL, если они явно не инициализированы во внешнем объявлении. Структуры можно инициализировать и с помощью оператора присваивания. При этом можно либо присвоить переменной-структуре переменную того же типа, либо присвоить значения отдельным элементам структуры.
Доступ к элементам структур
Для обращения к элементам структур используются две операции: операция элемента структуры (.), также называемая операцией-точкой, и операция указателя структуры (->), также называемая операцией-стрелкой. Операция элемента структуры обращается к элементу через имя переменной структуры.
Например, для того чтобы напечатать элемент suit структуры а из предыдущего объявления, можно написать оператор
printf("%s", a.suit);
Предположим, что переменная aPtr была объявлена как указатель на struct card и ей был присвоен адрес структуры а. Чтобы напечатать элемент suit структуры а при помощи указателя aPtr, напишите оператор
Выражение aPtr->suit эквивалентно (*aPtr).suit, которое, обращаясь по адресу, содержащемуся в указателе, находит структуру а и обращается к элементу suit, используя операцию элемента структуры. Скобки в данном случае необходимы по той причине, что операция элемента структуры (.) имеет более высокий приоритет, чем операция косвенной адресации (*). Операции указателя структуры и элемента структуры, наряду с круглыми скобками и квадратными скобками ([]), использовавшимися для индексов массивов, являются операциями наивысшего приоритета и ассоциируются слева направо.
Программа на рис.1 демонстрирует использование операций элемента структуры и указателя структуры. С помощью операции элемента структуры элементам а присваиваются значения "Асе" и "Spades" соответственно. Указателю aPtr присваивается адрес структуры а. Оператор printf печатает элементы структуры а, используя операцию элемента структуры с именем переменной а, операцию указателя структуры с указателем aPtr, и операцию элемента структуры с указателем aPtr, к которому применена операция косвенной адресации.
|
/* Применение операций элемента структуры
и указателя структуры */
#include <stdio.h>
struct card {
char *face;
char *suit; };
main () {
struct card a;
struct card *aPtr;
a.face ="Ace";
a.suit ="Spades";
aPtr =&a;
printf("%s%s%s\n%s%s%s\n%s%s%s\n",
a.face, " of ", a.suit,
aPtr->face, " of ", aPtr->suit,
(*aPtr).face, " of ", (*aPtr).suit);
return 0; }
Вывод на экран:
Ace of Spades Ace of Spades Ace of Spades
Рис. 1. Использование операций элемента структуры и указателя структуры
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!