КАТЕГОРИИ: Архитектура-(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; Просмотров: 684; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |