Вівторок, 19.03.2024, 10:12
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Хто ви?

Всього відповідей: 10
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Определение структурных переменных

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

 
struct имя_структуры {
 Описание_элементов
};
 

Пример:

 
struct dinner {
 char *place;
 float cost;
 struct dinner *next;
};
 

Структурная переменная описывается с помощью переменной структурного типа.

 

Примеры:

 
struct dinner week_days [7]; /* массив структур */
struct dinner best_one; /* одна структурная переменная */
struct dinner *p; /* указатель на структурную переменную */
 

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

 
struct {
 список описаний
} имя;
 

В структуре должен быть указан хотя бы один компонентУказатель типа структуры используется для определения структур. Определения структур имеют следующий вид:

 
тип-данных описатели;
 

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

 
struct {
 double x,y;
} a,b,c[9];
 

переменные a и b определяются как структуры, каждая из которых состоит из двух компонентов - x и yПеременная cопределяется как массив из девяти таких структур.

 

Из определения

 
struct {
 int year;
 short int month, day;
} date1,date2;
 

следует, что каждая из двух переменных date1date2 состоит из трех компонентов: yearmonthday.

 

С типом структуры может быть ассоциировано имя, которое задается описанием типа в форме

 
typedef struct {
 список описаний
} имя-типа-структуры;
 

Спецификатор typedef (определяет класс памяти) позволяет нам создать свое собственное имя типа. Это напоминает директиву#define, но со следующими тремя изменениями:

 
  1. В отличие от #define спецификатор typedef дает символические имена, но ограничивается только типами данных.
  2. Спецификатор typedef выполняется компилятором, а не препроцессором.
  3. В своих пределах спецификатор typedef более гибок, чем #define.
 

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

 
typedef struct {
 char name[30];
 int id;
 dept d;
 family f;
} employee;
 

где слова deptfamily указывают типы, а именно типы структур, предварительно определенные пользователем. Тип структурыemployee может быть использован для определения переменных. Например, определение

 
employee chairperson, president, e1, e2;
 

описывает переменные chairpersonpresidente1e2 как структуры типа employee.

 

Существует и другой способ ассоциирования имени с типом структуры. Этот способ основан на применении меток структурыМетки структуры аналогичны меткам перечисляемого типа. Метка структуры описывается следующим образом:

 
struct метка{
 список описаний
}
 

где метка является идентификатором. В приведенном ниже примере слово student описывается как метка структуры:

 
struct student {
 char name[25];
 int id,age;
 char sex;
};
 

Метки структуры используются для определения структур записью вида

 
struct метка список-идентификаторов;
 

Использование меток структуры необходимо для описания рекурсивных структур, так как одного только оператора typedefнедостаточно. В приведенном ниже примере описания рекурсивной метки структуры

 
struct node {
int data;
struct node *next;
};
 

метка структуры node действительно является рекурсивной, так как она используется в своем собственном описании, т.е. в описании указателя next. Из-за наличия знака * переменная next описана как указатель на объекты типа nodeСтруктуры не могут быть прямо рекурсивными. Структура типа S не может содержать компонент, являющийся структурой типа S. Однакоструктура типа S может содержать компонент, указывающий на структуру типа S.

Доступ к компонентам структуры

Такой доступ осуществляется с помощью специального обозначения для выделенного компонента, имеющего следующий вид:

 
s.c
 

где s является именем структуры или значением структуры с компонентом c. s может быть выражением, дающим в результатезначение структуры. Например, s может быть вызовом функции со структурой в качестве ее значения. К компонентам определенной выше структуры date1 можно обратиться, указав их обозначения:

 
date1.year
date1.month
date1.day
 

Поля битов в структурах

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

 

Пример:

 
struct bfeg {
 unsigned int bf_flg1 : 10;
 unsigned int bf_flg2 : 6;
};
 

Данная структура описывает 10-битовое поле, которое для вычислений преобразуется в значение типа unsigned int, и 6-битовоеполе, которое обрабатывается как значение типа unsigned int.

 

Объединения

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

 

Определение объединенного типа данных аналогично определению структурного типа данных:

 
union имя_объединения {
 Описания_элементов
};
 

Пример:

 
union bigword {
 long bg_long;
 char *bg_char [4];
};
 

Данные типа union bigword занимают память, необходимую для размещения наибольшего из своих элементов, и выравниваются в памяти к границе, удовлетворяющей ограничениям по адресации как для типа long, так и для типа char *[4].

 

Описание переменной объединенного типа:

 

Пример:

 
union bigword x;
union bigword *p;
union bigword a[100];
 

Перечисления

Данные перечислимого типа относятся к некоторому ограниченному множеству данных.

 

Определение перечислимого типа данных:

 
enum имя_перечислимого_типа {
 Список_значений
};
 

Каждое значение данного перечислимого типа задается идентификатором.

 

Пример:

 
enum color {
 red, green, yellow
};
 

Описание переменной перечислимого типа:

 
enum color chair;
enum color suite [40];
 

Использование переменной перечислимого типа в выражении.

 

Пример:

 
chair = red;
suite[5] != yellow;

 

Форма входа
Пошук
Друзі сайту
Календар
«  Березень 2024  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728293031

Єдина Країна! Единая Страна!