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

Субботин Д. М.

Шрифт:

Примеры:

/* пример 1 */

struct {

float х, у;

} complex;

/* пример 2 */

struct employee {

char name [20];

int id;

long class;

} temp;

/* пример 3 */

struct employee student, faculty, staff;

/* пример 4 */

struct sample {

char h; float *pf;

struct sample *next; )x;

/* пример 5 */

struct {

unsigned icon: 8;

unsigned color: 4;

unsigned underline: 1;

unsigned blink: 1;

} screen [25][80];

В первом примере объявляется переменная с именем complex, имеющая тип структура. Эта структура состоит из двух элементов х и у типа float. Тип структуры не поименован, поскольку тег в объявлении отсутствует.

Во втором примере объявляется переменная с именем temp, имеющая тип структура. Структура состоит из трех элементов с именами name, id и class. Элемент с именем name — это массив из 20 элементов типа char. Элементы с именами id и class — это простые переменные типа int и long соответственно. Структурный тип поименован тегом employee.

В третьем примере объявлены три переменные типа структура с именами student, faculty и staff. Объявление каждой из этих структур ссылается на структурный тип employee, определенный в предыдущем примере.

В четвертом примере объявляется переменная с именем х типа структура. Тип структуры поименован тегом sample. Первые два элемента структуры — переменная h типа char и указатель рf на значения типа float. Третий элемент с именем next объявлен как указатель на структуру того же самого типа sample.

В пятом примере объявляется двумерный массив с именем screen, элементы которого имеют структурный тип. Массив состоит из 2000 элементов. Каждый элемент — это отдельная структура, состоящая из четырех элементов — битовых полей с именами icon, color, underline и blink.

Объявление объединения

Объединение позволяет в разные моменты времени хранить в одном объекте значения различного типа. В процессе объявления объединения с ним ассоциируется набор типов значений, которые могут храниться в данном объединении. В каждый момент времени объединение может хранить значение только одного типа из набора. Контроль над тем, какого типа значение хранится в данный момент в объединении, возлагается на программиста. Синтаксис:

union [<тег>] {<список-объявлений-элементов>} <описатель> [,<описатель>…];

union <тег> <описатель> [,<описатель>…];

Объявление объединения специфицирует его имя и совокупность объявлений переменных, называемых элементами объединения, которые могут иметь различные типы.

Объявление объединения имеет тот же синтаксис, что и объявление структуры, за исключением того, что оно начинается с ключевого слова union, а не с ключевого слова struct. Кроме того, СП MSC (в отличие от СП ТС) не допускает в объединении битовые поля.

Память, которая выделяется переменной типа объединение, определяется размером наиболее длинного из элементов объединения. Все элементы объединения размещаются в одной и той же области памяти с одного и того же адреса. Значение текущего элемента объединения теряется, когда другому элементу объединения присваивается значение.

Примеры:

/* пример 1 */

union sign {

int svar;

unsigned uvar;

} number;

/* пример 2 */

union {

char *a, b;

float f[20];

} jack;

В первом примере объявляется переменная типа объединение с именем number. Список объявлений элементов объединения содержит две переменных: svar типа int и uvar типа unsigned. Это объединение позволяет запоминать целое значение в знаковом или беззнаковом виде. Тип объединения поименован тегом sign.

Во втором примере объявляется переменная типа объединение с именем Jack. Список объявлений элементов содержит три объявления: указателя а на значение типа char, переменной b типа char и массива ж из 20 элементов типа float. Тип объединения не поименован тегом. Память, выделяемая переменной jack, равна памяти, необходимой для хранения массива f, поскольку это самый длинный элемент объединения.

  • Читать дальше
  • 1
  • ...
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: