Основи програмування на С ++ для початківців

Масив структур. Вказівник на структуру

Точно так же, як ми можемо створювати масиви будь-яких вбудованих типів даних (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 ++

8 думки про "Масив структур. Вказівник на структуру

  1. Як так можно делать Guide по реченню ні ну на справді ето както смешно роби на одном язьке а так большое дякую за урок.

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *