Массив структур. Указатель на структуру




массив структур с++, массив структур c++

Точно так же, как мы можем создавать массивы любых встроенных типов данных (int, char…), можно создавать массивы структур. Рассмотрим это на примере со структурой WonderfulWoman знакомой нам из первой и второй частей статьи о структурах C++.

Надо внести данные о 7-ми моделях. Данные показать на экран в виде таблицы, чтобы было легче их сравнить. Схематично так:

массив структур с++, массив структур c++, указатель на структуру c++

Чтобы это реализовать — набирайте код:

Массив объектов структуры WonderfulWoman объявлен в строке 29 и в этой же строке все элементы объектов в этом массиве инициализированы нулями. Как видите — кроме того, что вместо встроенного типа мы написали дескриптор структуры, больше ничего нового в этом объявлении для нас нет. Дали имя массиву, указали количество элементов (объектов), инициализировали нулями — всё. Таким образом мы создали массив объектов структуры.

Как обратиться к элементу конкретного объекта структуры? Обычное обращение через точку уже не подойдет:

массив структур с++, массив структур c++, указатель на структуру c++

Конечно, ведь непонятно в какой именно объект из 7 надо внести данные. Так как каждый объект теперь является ячейкой массива структур, чтобы обратиться к его элементам надо сначала указать индекс объекта в квадратных скобках. Только потом точку и имя элемента:

массив структур с++, массив структур c++, указатель на структуру c++

В строках 31- 49 находится цикл for. С его помощью вносятся данные во все объекты массива структур. Обратите внимание на строку 47. Без этого оператора cin.get(); вы столкнетесь с ошибкой, о которой компилятор вам не сообщит. Она заключается в том, что после внесения данных в элемент Woman[i].volume.hips и нажатия Enter, в потоке ввода остаётся символ конца строки. Когда цикл продолжит работу — этот символ автоматически запишется в Woman[i].name следующего объекта и нам сразу будет предложено ввести возраст. То есть имя внести мы не сможем. Чтобы этого избежать, надо считать из потока этот символ с помощью cin.get(); .

Результат — заполняем структуры данными :

массив структур с++, массив структур c++, указатель на структуру c++

После ввода данных всех моделей, экран очистится (за что отвечает system(«cls»);) и мы увидим таблицу:

массив структур с++, массив структур c++, указатель на структуру c++


В этой статье поговорим ещё об указателях на структуры. Если, например, надо написать функцию, в которой будут записываться данные в элементы структуры, то необходимо передать эту структуру по указателю. Иначе изменения не сохранятся. Рассмотрим пример со структурой Size из предыдущего листинга. Надо написать функцию, в которой пользователь вносит данные в элементы структуры.

Объявляя указатель на структуру, не забывайте о том, что надо выделить память под неё — строка 18. Указатель объявлен. Давайте разберёмся теперь, как обращаться к элементам структуры, через указатель. Допустим надо внести значение в элемент waist. Использовать . — операцию доступа по объекту уже не получится:

массив структур с++, массив структур c++, указатель на структуру c++Ошибку подсвечивает потому, что указатель должен хранить адрес, а он пытается обратиться к элементу типа int. Попробуем разыменовать указатель на структуру:

массив структур с++, массив структур c++, указатель на структуру c++

Теперь все нормально, но это не совсем удобная запись. В С++ есть специальная операция доступа по указателю (стрелочка — состоит из тире и знака больше) -> . Она как бы показывает, на какой элемент структуры ссылается указатель:

массив структур с++, массив структур c++, указатель на структуру c++

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

Результат:

массив структур с++, массив структур c++, указатель на структуру c++

Чтобы поддержать наш сайт — нажмите на копилку и выберите любой удобный способ.

Рассылка новых уроков по программированию:

Дата
Страница
Массив структур C++. Указатель на структуру C++
Рейтинг
51star1star1star1star1star

Добавить комментарий

Код размещайте в тегах: <pre class="lang:c++ decode:true ">YOUR CODE</pre>