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

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

20.12.2016, 00:44. Показов 15006. Ответов 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
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,227
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru