Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

void NamePrint(Name a)



{printf("%-15s%-10s\n",a.fam,a.name);}

void NameInput(Name *a, int n)

{clrscr();

printf(Rus("Введите фамилию и имя: "));

scanf("%s%s",a[n].fam,a[n].name);}

Void main()

{Name list[5];

for (int i=0; i<5; i++) NameInput(list,i);

clrscr();

printf(Rus("Введен список:\n"));

for (int i=0; i<5; i++) NamePrint(list[i]);

printf(Rus("\nДля завершения нажмите любую клавишу"));

getch();

}

 

Если p - указатель на структуру, то

(++p)->x - операция увеличивает p до доступа к x;

(p++)->x - операция увеличивает p после доступа к x (круглые скобки не обязательны, так как по старшинству раньше будет применена операция "->");

*p->y - выбирается содержимое объекта, на который указывает y;

*p->y++ - увеличивается y после обработки того, на что он указывает (аналогично *s++);

*p++->y - увеличивает p после выборки того, на что указывает y;

(*(*p).y)++ - увеличивает то, на что указывает y.

 

Можно отметить одно очень важное использование структур: создание новых типов данных. Существуют типы данных, гораздо более эффективные при решении определенных задач, чем массивы и структуры. Это очереди, двоичные деревья, множества, таблицы и графы. Многие из этих типов создаются из "связанных" структур. Обычно каждая такая структура содержит один или два типа данных плюс один или два указателя на другие структуры такого же типа. Указатели служат для связи одной структуры с другой и для обеспечения пути, позволяющего вести поиск по всей структуре.

 

Битовые поля

Элементы структуры можно определить как знаковые или беззнаковые битовые поляшириной от 1 до 16 бит. Битовые поля - это особый вид полей структуры. Они используются для плотной упаковки данных. Общая форма описания для битового поля следующая:

 

struct [имя_структуры]

{ тип_1 элемент_1: размер в битах;

тип_2 элемент_2 : размер в битах;

...

тип_n элемент_n : размер в битах;}

[ список_описателей ];

 

где тип– любой целый тип;

размер– целое число от 0 до 16.

 

Пример:

struct Options {

bool centerX:1;

bool centerY:1;

unsigned int shadow:4;

unsigned int palette:4;

};

 

Для знаковых полей старший левый бит интерпретируется как знак. Например, если в поле шириной 2 бита записано двоичное 11, то это интерпретируется как 3 для типа unsigned, но как -1 для типа int. Битовые поля могут быть определены только в структурах, объединениях и классах. Доступ к ним осуществляется с помощью тех же операторов “.” и “->”.

 

#include <iostream.h>

#include <windows.h>

Struct Bits

{ unsigned bit1: 5; unsigned bit2: 5;

unsigned bit3: 5; unsigned bit4: 7;} BS;

Void main()

{ BS.bit1 = 25; BS.bit2 = 15; BS.bit3 = 30;

BS.bit4=BS.bit1+BS.bit2+BS.bit3;

cout << BS.bit1 << " " << BS.bit2 << " " << BS.bit3 << endl;

cout << "Sum: " << BS.bit4 << endl;

system("pause");}

Объединения

Структура данных объединение подобна структуре, однако в каждый момент времени может использоваться (является активным) только один из его компонентов. Шаблон объединения может задаваться записью вида:

 

union [имя объединения]

{

<имя типа1> <компонента1>;

<имя типа2> <компонента2>;

. . .

<имя типаN> <компонентаN>;

} [список описателей];

 

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

Доступ к компонентам объединения осуществляется тем же способом, что и к компонентам структур.

 

Пример.

#include <iostream.h>

#include <windows.h>

Void main ()

{

union {int a; char b;} kkk;

kkk.a = 45;

cout << kkk.a << endl;

cout << kkk.b << endl;

system("Pause");

}

 

Объединение применяется для следующих целей:

- инициализации используемого объекта памяти, если в каждый момент времени только один объект из многих является активным;

- интерпретации основного представления объекта одного типа, как если бы этому объекту был присвоен другой тип.

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

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.