Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Динамические структуры и массивы структур




Использование указателей на структуры

Массивы структур

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

Worker staff [100]; // массив из 100 структур типа Worker

При инициализации массивов структур удобно заключать в фигурные скобки список значений для каждой структуры:

Worker worker[2] = { { 3124, "Ivanoff", 31, 3400.55},

{ 3125, "Petroff", 35, 3900.00} };

Можно не структурировать фигурными скобками данные для инициализации, тогда они будут присваиваться полям структур в порядке их расположения.

Пример доступа к полям массива структур:

staff[8].age = 30;

cout <<staff[5].fio;

char c = staff[7].fio[0];

Можно объявить указатель на структуру:

// определение указателя на тип Worker

Worker *pw;

а затем присвоить ему адрес существующей переменной указанного типа:

pw = &worker; // worker – переменная типа Worker

Объявление и инициализацию указателя, как обычно, можно совместить:

Worker *pw = &worker;

Для доступа к элементам (полям) структуры через указатель используется операция -> (“стрелка”, селектор):

pw->salary = 150000;

1.2.2.3. Об операциях. и –>

Операция –> является кратким способом записи доступа к значению структуры по ее адресу. Другой, более подробный способ записи предыдущего оператора:

(*pw).salary = 150000;

Операции. и –>, наряду с операцией индексирования [], имеют наивысший приоритет среди всех операций (выше, чем унарные).

Поэтому, например, код

Worker *pw = staff;

++pw->code;

увеличит значение переменной code начальной (с нулевым индексом) структуры массива структур staff, а не значение указателя pw.

Память под структуру и массив структур можно выделять динамически:

Worker *pw = new Worker; // выделение памяти для структуры

pw->age=28;

pw->code=3983;

Worker *pwd = new Worker[k]; // выделение памяти для массива из k структур

Освобождение выделенной памяти осуществляется с помощью оператора delete:

delete pw;

delete [] pwd;

Обращение к полям элементов динамического массива структур можно осуществлять любым из возможных способов – с помощью операций индексирования,. или ->, на­пример:

pwd[2].age=28;

(pwd+2)->code=3983;

(*(pwd+2)).salary=35000;

(скобки необходимы, так как приоритет операций. и –> выше, чем приоритет операции *).

Легко догадаться, что способы доступа к полям элементов статического массива структур те же, поскольку массив в C++ реализован как указатель на его начало:

Worker staff[100];

...

int nAge = staff[1].age;

int iCode = (staff+2)->code;

int iAge = (*(staff+2)).age;

Динамический массив структур можно реализовать как массив указателей.

Комбинируя структуры и массивы можно строить достаточно сложные, универсальные и гибкие структуры данных.

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




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 650; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.