Наиболее мощный агрегированный тип языка Си. Возможность создания объективных данных

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

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

Структура

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

Struct [<тег>] {<список структуры>} <ид> [,<ид>,…];

Struct <тег> <ид> [,<ид>,…];

Тег – имя структуры. Список <спецификация типа> <ид> [, <ид>,…];

Перед спецификацией типа не д.б. спецификатора памяти. Внутри структуры нельзя объявлять структуру с этим же тегом, однако можно объявить указатель на структуру с этим же тегом. Внутри списка структуры все ид. д.б. уникальны, хотя они не конфликтуют с ид. из списков др. агрегированных типов, с тегом и структурной переменной. Тег же конфликтует только с другими тегами. Объявление по 2 синтаксической форме возможно лишь тогда, когда ранее было записано по 1 синтаксической форме с заданным именем тега (это ссылка).

В ОП элементы структуры располагаются в том порядке, в каком они записаны в списке. Для доступа к элементу структуры исп. имя и следующие операции: . – через непосредственно заданную переменную и ® - через указатель на переменную структурного типа.

Struct stud

{

char name [18];

char surname [18];

int age;

} vasja; *pa

vasja. name[0]=’a’;

pa®name[0]=’a’;

Элементы структуры размещаются в ОП с выравниванием на некоторую границу. Смысл выравнивания заключается в том, что поле, отводимое под переменную, начинается с байта, адрес которого кратен 1,2,4,8 поэтому длина переменной не кратна параметру выравнивания между элементами  могут появиться незанятые и недоступные промежутки.

Минимально адресуемой единицей в памяти ЭВМ является байт. Практически никакие языки пр-ия не позволяют получить доступ к группе битов внутри байта. В Си это возможно. Данный механизм реализован только для структуры. Битовые поля позволяют плотно упаковать значения в группе битов  для экономии ОП.

Структура, описывающая битовые поля, отличается синтаксисом списка: <unsigned int> <ид>: <конст. выражение> конст. выраж - (0-16). При обработки структуры, содержащей битовые поля, компилятор размещает в ОП беззнаковую целую переменную, резервирует число байт, указанное константным выражением под битовое поле с заданным инд. Есть 2  случафя объявления битовых полей: когда нет ид – поле распределяется, но к нему нет доступа, и константное выражение = 0 – принудит. Пропуск оставшихся свободных битов и след. Битовое поле распределяется в новом машинном слове. 

Struct tg

{

unsigned: 5;

unsigned a: 10;

unsigned b: 8;

unsigned: 0;

unsigned c: 3;

} d[2]

Никакие операции, связанные с адресами к битовым полям не применимы (т.к. минимальной единицей является байт).

Операции над структурой как единым целым: & - взять адрес, size of – определение размера в байтах, = - присваивание структур с одинаковыми тегами.

Объединение (union)

Агрегированный тип, позволяющий хранить в одном объекте значения разных типов в различные моменты времени. Только 1 из значений является актуальным. Контроль за правильностью исп. возлагается на программиста. Отличие от структуры – в способе размещения элементов - выделяется участок памяти = длине наибольшего элемента в списке объединения.   

Union <тег> ид [, ид]

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.