Структуры

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

6. Структуры.

Структура - это набор из одной или более переменных,

возможно различных типов, сгруппированных под одним именем

для удобства обработки. (В некоторых языках, самый известный

из которых паскаль, структуры называются “записями”).

Традиционным примером структуры является учетная карточ-

ка работающего: “служащий” описывается набором атрибутов та-

ких, как фамилия, имя, отчество (ф.и.о.), адрес, код соци-

ального обеспечения, зарплата и т.д. Некоторые из этих атри-

бутов сами могут оказаться структурами: ф.и.о. Имеет нес-

колько компонент, как и адрес, и даже зарплата.

Структуры оказываются полезными при организации сложных

данных особенно в больших программах, поскольку во многих

ситуациях они позволяют сгруппировать связанные данные таким

образом, что с ними можно обращаться, как с одним целым, а

не как с отдельными объектами. В этой главе мы постараемся

продемонстрировать то, как используются структуры. Програм-

мы, которые мы для этого будем использовать, больше, чем

многие другие в этой книге, но все же достаточно умеренных

размеров.

 

6.1. Основные сведения.

Давайте снова обратимся к процедурам преобразования даты

из главы 5. Дата состоит из нескольких частей таких, как

день, месяц, и год, и, возможно, день года и имя месяца. Эти

пять переменных можно объеденить в одну структуру вида:

 

STRUCT DATE \(

INT DAY;

INT MONTH;

INT YEAR;

INT YEARDAY;

CHAR MON_NAME[4];

\);

 

Описание структуры, состоящее из заключенного в фигурные

скобки списка описаний, начинается с ключевого слова STRUCT.

За словом STRUCT может следовать необязательное имя, называ-

емое ярлыком структуры (здесь это DATе). Такой ярлык именует

структуры этого вида и может использоваться в дальнейшем как

сокращенная запись подробного описания.

Элементы или переменные, упомянутые в структуре, называ-

ются членами. Ярлыки и члены структур могут иметь такие же

имена, что и обычные переменные (т.е. Не являющиеся членами

структур), поскольку их имена всегда можно различить по кон-

тексту. Конечно, обычно одинаковые имена присваивают только

тесно связанным объектам.


·     129 -

Точно так же, как в случае любого другого базисного ти-

па, за правой фигурной скобкой, закрывающей список членов,

может следовать список переменных.

Оператор

 

STRUCT \( ...\) X,Y,Z;

синтаксически аналогичен

INT X,Y,Z;

в том смысле, что каждый из операторов описывает X , Y и Z в

качестве переменных соотвествующих типов и приводит к выде-

лению для них памяти.

Описание структуры, за которым не следует списка пере-

менных, не приводит к выделению какой-либо памяти; оно толь-

ко определяет шаблон или форму структуры. Однако, если такое

описание снабжено ярлыком, то этот ярлык может быть исполь-

зован позднее при определении фактических экземпляров струк-

тур. Например, если дано приведенное выше описание DATE, то

 

STRUCT DATE D;

определяет переменную D в качестве структуры типа DATE.

Внешнюю или статическую структуру можно инициализировать,

поместив вслед за ее определением список инициализаторов для

ее компонент:

 

STRUCT DATE D=\( 4, 7, 1776, 186, “JUL”\);

Член определенной структуры может быть указан в выраже-

нии с помощью конструкции вида

имя структуры . Член

Операция указания члена структуры “.” связывает имя структу-

ры и имя члена. В качестве примера определим LEAP (признак

високосности года) на основе даты, находящейся в структуре

D,

 

LEAP = D.YEAR % 4 == 0 && D.YEAR % 100 != 0

\!\! D.YEAR % 400 == 0;

или проверим имя месяца

IF (STRCMP(D.MON_NAME, “AUG”) == 0) ...

Или преобразуем первый символ имени месяца так, чтобы оно

начиналось со строчной буквы

 

D.MON_NAME[0] = LOWER(D.MON_NAME[0]);

·    
130 -

Структуры могут быть вложенными; учетная карточка служа-

щего может фактически выглядеть так:

STRUCT PERSON \(

CHAR NAME[NAMESIZE];

CHAR ADDRESS[ADRSIZE];

LONG ZIPCODE; /* почтовый индекс */

LONG SS_NUMBER; /* код соц. Обеспечения */

DOUBLE SALARY; /* зарплата */

STRUCT DATE BIRTHDATE; /* дата рождения */

STRUCT DATE HIREDATE; /* дата поступления

на работу */

\);

 

 

Структура PERSON содержит две структуры типа DATE . Если мы

определим EMP как

 

STRUCT PERSON EMP;

то

EMP.BIRTHDATE.MONTH

будет ссылаться на месяц рождения. Операция указания члена

структуры “.” ассоциируется слева направо.

 


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх