С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/75: Рейтинг темы: голосов - 75, средняя оценка - 4.55
 Аватар для Denuha
9 / 9 / 7
Регистрация: 01.07.2015
Сообщений: 88

Массив указателей на структуру

20.12.2016, 00:44. Показов 14902. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описали структуру
C++
1
2
3
4
5
6
struct avto
{
    int cena;
    char marka[100];
    bool by;
};
Объявили массив и добавили туда значения
C++
1
2
3
4
5
6
7
8
9
10
int n = 10;
 
avto mass_moix_avto[n];
    for (int i=0; i<n; i++)
    {
        cout << "Введите марку: "; cin >> mass_moix_avto[i].marka;
        cout << "Введите цену: "; cin >> mass_moix_avto[i].cena;
        cout << "б/у?: "; cin >> mass_moix_avto[i].by;
        cout << "*---------------*\n";
    }
Объявили массив указателей на структуру
C++
1
avto * p_mass[n];
Задание:
4) Создать массив из 10 указателей на описанный тип struct.
Настроить элементы массива указателей на элементы массива структур в порядке возрастания значений одного из полей (отличного от поля, используемого в третьем задании).
5) Вывести на экран значения массива структур, обращаясь к ним через элементы массива указателей.
Попытки решения:
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < n; i++)  // "Настраиваем" элементы массива указателей на элементы структур
    {
        p_mass[n] = &mass_moix_avto[n];
    }
 
for (int i=0;i<n;i++)  // Вывожу. На этом появляется ошибка.
    {
        cout << p_mass[i]->marka << "\t\t" << p_mass[i]->cena << "\t\t" << p_mass[i]->by << "\t\t\n";
    }
Что делаю неправильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2016, 00:44
Ответы с готовыми решениями:

Массив указателей на структуру
Создал структуру. В классе хочу создать массив из указателей, каждый которого указывает на объект структуры. И с помощью функции хочу...

Динамический массив указателей на структуру
Не могу понять как выделить место под динамический массив указателей на структуру с помощью new. Все верно делаю? int lol = 1024; ...

Отсортировать динамический массив указателей на структуру (по номеру группы)
Считайте все записи из файла &quot;6.dat&quot;. Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается, что к-во...

10
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.12.2016, 01:19
Цитата Сообщение от Denuha Посмотреть сообщение
avto * p_mass[n];
Ты создаёшь массив с указателей на указатель.
Делай так:
C++
1
2
3
4
5
6
7
8
const int n = 10; // обязательно const если хочешь выделить на этапе компиляции
avto* ptrAuto; // это указатель на структуру типа avto, но он пока ни на что не указывает
avto autos[10]; // здесь выделяется память под 10 объектов структуры
ptrAuto = autos; // в указатель записываем адрес первого элемента массива
for (int i=0;i<n;i++)
        cout << ptrAuto[i].marka << "\t\t" <<ptrAuto[i].cena << "\t\t" << ptrAuto[i].by << "\t\t\n";
        //или   cout << *(ptrAuto + i).marka << "\t\t" <<*(ptrAuto + i).cena << "\t\t" << *(ptrAuto + i).by << "\t\t\n";
        //или   cout << (ptrAuto + i)->marka << "\t\t" <<(ptrAuto + i)->cena << "\t\t" << (ptrAuto + i)->by << "\t\t\n";
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
20.12.2016, 01:23
Цитата Сообщение от triadec_96 Посмотреть сообщение
Делай так:
А где здесь это?
Цитата Сообщение от Denuha Посмотреть сообщение
4) Создать массив из 10 указателей на описанный тип struct.
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.12.2016, 01:27
Цитата Сообщение от nd2 Посмотреть сообщение
А где здесь это?
По факту каждый элемент массива autos является указателем, который разименовывается при индексировании.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
20.12.2016, 01:38
Цитата Сообщение от Denuha Посмотреть сообщение
Что делаю неправильно?
Цитата Сообщение от Denuha Посмотреть сообщение
p_mass[n] = &mass_moix_avto[n];
C++
1
p_mass[i] = &mass_moix_avto[i];
Добавлено через 4 минуты
Цитата Сообщение от triadec_96 Посмотреть сообщение
По факту каждый элемент массива autos является указателем
По факту, каждый элемент массива autos, является объектом структуры.
Цитата Сообщение от triadec_96 Посмотреть сообщение
avto autos[10]; // здесь выделяется память под 10 объектов структуры
Добавлено через 2 минуты
Цитата Сообщение от Denuha Посмотреть сообщение
int n = 10;
По стандарту нужно:
C++
1
const int n = 10;
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.12.2016, 01:39
Цитата Сообщение от nd2 Посмотреть сообщение
По факту, каждый элемент массива autos, является объектом структуры.
Массив состоит с элементов, расположенных в памяти последовательно. Каждый элемент обладает как адресом, так и значением. Адрес элемента - значение для некого указателя. Для указателя массив autos - массив адресов. Исходя с этого мы можем получать доступ к значениям данных адресов таким образом:
C++
1
*(ptrAuto + i).marka или (ptrAuto + i)->marka
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
20.12.2016, 01:53
Цитата Сообщение от triadec_96 Посмотреть сообщение
Массив состоит с элементов, расположенных в памяти последовательно. Каждый элемент обладает как адресом, так и значением. Адрес элемента - значение для некого указателя. Для указателя массив autos - массив адресов. Исходя с этого мы можем получать доступ к значениям данных адресов таким образом:
Не о чём. То, что у каждого элемента массива структур можно взять адрес, не делает этот массив массивом адресов. Нет в твоём коде, а в коде ТС - есть:
Цитата Сообщение от Denuha Посмотреть сообщение
4) Создать массив из 10 указателей на описанный тип struct.
Цитата Сообщение от Denuha Посмотреть сообщение
Объявили массив указателей на структуру
C++
1
avto * p_mass[n];
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,209
20.12.2016, 02:59
Цитата Сообщение от Denuha Посмотреть сообщение
Что делаю неправильно?
Почти все правильно, но смотрите на тело своего первого цикла внимательнее. Сделана элементарная ошибка.

Добавлено через 1 минуту
Цитата Сообщение от triadec_96 Посмотреть сообщение
Ты создаёшь массив с указателей на указатель
Это массив указателей на стурктуры - именно то, что требуется в задании. У ТС все сделано правильно.

Цитата Сообщение от triadec_96 Посмотреть сообщение
Делай так:
Нет.
1
114 / 112 / 62
Регистрация: 15.03.2013
Сообщений: 561
Записей в блоге: 5
20.12.2016, 03:14
Создать массив из 10 указателей на описанный тип struct
.
По мне дак это есть не что иное как двумерный массив. Чем не подходит реализация двумерного динамического массива?
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
20.12.2016, 03:42
Цитата Сообщение от ящюр Посмотреть сообщение
По мне дак это есть не что иное как двумерный массив.
С чего бы это?

Добавлено через 44 секунды
Цитата Сообщение от ящюр Посмотреть сообщение
Чем не подходит реализация двумерного динамического массива?
Тем, что не соответствует заданию.
1
 Аватар для Denuha
9 / 9 / 7
Регистрация: 01.07.2015
Сообщений: 88
20.12.2016, 09:11  [ТС]
Всем спасибо за обсуждение. Действительно проблема была в опечатке в цикле.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2016, 09:11
Помогаю со студенческими работами здесь

Как функция возвращает указатель на структуру в массив указателей
Друзья, следующий вопрос, у меня есть функция, которая: создает указатель на структуру-&gt; выделяет память-&gt; заполняет из файла-&gt;...

Массив указателей на массив строк и сортировка массива указателей
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Массив из указателей на масив из указателей на массив из int)
Доброго времени суток! Возникла проблема - как на C++ создать массив из указателей на массив из указателей на int? То есть массив из n...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru