Средства препроцессора. Условная компиляция. Параметры функции main( ). Динамическая память. Функции с неопределённым количеством параметров. Типы данных: структура, перечисление, объединение, страница 3

Объединение – структура, для которой в памяти выделяется ровно столько места сколько места в памяти занимает самый большой элемент структуры.

union packed         //   - ввели новый тип данных  packed , это об'явление об'единения - union

{       

    char ch;

    short sh;

    unsigned int in;

    long l;

    float f;

    double d;             

};                                

об'единение packed имеет размер типа double, так как это наибольший элемент

Проверить, что это так можно, использовав операцию sizeof

           printf("sizeof(union packed) =  %d\n\n", sizeof(union packed) );

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

  union packedX;                      - создали объект Х типа packed

  X.d = 3.14159;              - записали в него двойное вещественное

И попробуем по разному его извлечь.

    printf("X.d  = %f\n", X.d );         // можно обратиться к любому полю

    printf("X.ch  = %c\n", X.ch );        // но данные хранятся только одни

    printf("X.in  = %u\n", X.in );

Объединение позволяет нам экономно использовать память

9)   программа  Dc_9.*

Пример, как объединеие используется для построения пользовательского типа данных – «самолет»

Последняя строка определения типа данных aircraft сразу создаёт ещё 3 объекта «самолёт»

} fighter, bomber, transport;    // create OBJECTS

Это почти как

      struct aircraft fighter, bomber, transport;   

В «самолёте» есть грузовое отделение, в котрое можно положить разный груз.

Естественно, что в «самолёт» загрузили, то там и лежит

10) программа  Dc_10.*

Пример для проверки понимания работы с объединением.

Прочитайте внимательно пример и напишите результат работы программы.

Уберите комментарии и проверьте себя.

11)  программа  Dc_11.*

Пример переименовыания типа данных.

В программе используется массив данных типа: type AA[SIZE];   

Так как не существует базового типа type, то он вводится с помощью оператора

typedef   long     type;

typeвыступает как синоним (новое обозначение) для типа long.

Поменяйте long например на double

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

Задание (учебное):  

Требуется решить задачу 2401.

Задание (проверочное):  

Требуется решить  задачу  2410

Замечания

-------------

а) Работающая Программа должна быть оформлена:

   подписана и иметь структурированный вид

Что необходимо знать:

1. Средства препроцессора  C         #define   #if

2.  int main(int argc, char* argv[])

3  Динамическая память    malloc()   free().

4  Функции

            указатель на функцию

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

5. Типы данных:

структура,

перечисление,

           объединение

6. Переименование типов typedef

Вопросы для «продвинутых»

-  Что в Лабораторной работе написано не правильно?

-  Что в Лабораторной работе написано плохо?

-  Что в Лабораторной работе пропущено и следует добавить?