Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 4

Динамические структуры Book

27.10.2012, 00:25. Показов 2808. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как запихнуть в элемент (BOOK** k) структуры (KART) адрес созданной одиночной динамической переменной структуры (BOOK)?
Вот, что я имею:

C++
1
2
3
4
5
6
7
8
9
10
book.h:
struct BOOK {
    int pos;
    int prise;
};
struct KART {
    BOOK** k;
    int curent_pos;
    int capacity;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "book.h"
#include <cstdio>
#define   stop __asm nop    
void main()
{
    struct KART* b=new KART[3]
    b->capacity=3;
    b->curent_pos=0;
 
    for(int i=0;i<b->capacity;i++)
    {
        BOOK* book = new BOOK;
        b[i].k = &book; //<<-----тут записываю адрес.
        book->pos = i*10;
        book->prise=10+i;
        printf("%d. book->pos: %-5d book->prise: %-5d b[%d].k = %d\n", i,(*book).pos,(*book).prise, i, &book);
    }
    for(int i=0;i<b->capacity;i++)
    {
        printf("%d  %d\n",(*(*(b[i]).k)).pos, (*(*(b[i]).k)).prise);
    }
delete[] b;
b=nullptr;
}
Привел код который сделал. Что я не так делаю, почему у меня записывается постоянно один и тот же адрес?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2012, 00:25
Ответы с готовыми решениями:

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Создать класс Book. Переменная типа Book должна содержать следующие поля:
Помогите решить=(. Создать класс Book. Переменная типа Book должна содержать следующие поля: название, количество авторов; авторы; год...

Динамические структуры данных
Создать линейный односвязный список. Заменить последний элемент на другой, вводимый с клавиатуры. Удалить предпоследний элемент и добавить...

8
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
27.10.2012, 02:30
1. Это C++. В C нет new и delete, для выделения памяти пользоваться malloc либо calloc, для уничтожения free
2.
C++
1
2
BOOK* book = new BOOK;
        b[i].k = &book; //<<-----тут записываю адрес.
Тут на каждой итерации цикла выделяется память под структуру типа BOOK и ее адрес записывается в переменную book. Потом адрес переменной в которой хранится адрес структуры записывается в другую переменную. После завершения каждой итерации переменная book будет уничтожена (но не то на что она указывает) и создана новая переменная book, которая вполне может записаться на место предыдущей, что и происходит в вашем коде.
Не очень понятно зачем вам вообще нужен в структуре KART указатель на указатель, одного указателя вполне достаточно.
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
27.10.2012, 04:46
ах как тяжело
воспрос...
Цитата Сообщение от doctor_lecter Посмотреть сообщение
2. Код C++12 BOOK* book = new BOOK; b[i].k = &book; //<<-----тут аписываю адрес. Тут на каждой итерации цикла выделяется память под структуру па OOK и ее адрес записывается в переменную book. Потом адрес переменной в которой ранится дрес структуры записывается в другую переменную. После завершения каждой итерации еременная book будет уничтожена (но не то на что она указывает) и создана новая переменная ook, которая вполне может записаться на место предыдущей, что и происходит в вашем коде. Не чень понятно зачем вам вообще нужен в структуре KART указатель на указатель, одного указателя вполне достаточно.


Цитата Сообщение от Bykva_Iob Посмотреть сообщение
Подскажите пожалуйста, как запихнуть в элемент (BOOK** k) структуры (KART) адрес созданной одиночной динамической переменной структуры (BOOK)?
дак тут без пары геры точек не разойтись... сформулируй, ибо все помрут в нирване.
1
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 4
27.10.2012, 11:39  [ТС]
Цитата Сообщение от doctor_lecter Посмотреть сообщение
1. Это C++. В C нет new и delete, для выделения памяти пользоваться malloc либо calloc, для уничтожения free
блин, по ошибке не туда нажал, как перенести в тот раздел?

А зачем это надо, задание звучит так, создаете структуру "картотека" в которой будет содержаться информация по книжкам, (каждая книжка представляет собой еще отдельную структуру).
Суть задания сделать динамическую структуру, в которую можно будут добавлять, удалять книжки, сортировать книги по любому поля, переставлять книги местами. Из-за того, что придется добавлять еще книжки в структуру (придется динамически увеличивать размер структуры) , а предыдущую информацию из структуры необходимо переписать в новую (расширенную) структуру и появился в структуре KART указатель на указатель (т.к. указатель на указатель содержит только адрес отдельного динамически созданного экземпляра (4 байта), а если мы будем перегонять каждый элемент прошлой структуры в новый элемент новой структуры, тут мы будем ворочить больший объем данных).
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
27.10.2012, 12:31
Цитата Сообщение от Bykva_Iob Посмотреть сообщение
Из-за того, что придется добавлять еще книжки в структуру (придется динамически увеличивать размер структуры) , а предыдущую информацию из структуры необходимо переписать в новую (расширенную) структуру и появился в структуре KART указатель на указатель (т.к. указатель на указатель содержит только адрес отдельного динамически созданного экземпляра (4 байта), а если мы будем перегонять каждый элемент прошлой структуры в новый элемент новой структуры, тут мы будем ворочить больший объем данных).
Ну а что изменится если будет указатель вместо указателя на указатель, размер то у них одинаковый?
Ну если все-таки вам хочется 2 указателя, то нужно 2 раза выделять память, и не забывать 2 раза возвращать.
C++
1
2
3
4
5
6
7
BOOK** ppBook = new BOOK*;
BOOK* pBOOK = new BOOK;
*ppBook = pBook;
b[i].k = ppBook;
// Потом удалить 2 раза
delete *b[i].k;
delete b[i].k;
И если вы используете C++, не проще ли создать класс картотека, в котором будет массив книг (или наиболее подходящий для вашей задачи контейнер) и методы для добавить книгу, удалить книгу, ну и другие которые нужны по заданию.
1
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 4
27.10.2012, 17:54  [ТС]
Цитата Сообщение от doctor_lecter Посмотреть сообщение
И если вы используете C++, не проще ли создать класс картотека, в котором будет массив книг (или наиболее подходящий для вашей задачи контейнер) и методы для добавить книгу, удалить книгу, ну и другие которые нужны по заданию.
А другое ничего использовать нельзя, т.к. проходили тему структуры, а это задание было в рамках этой темы. Каюсь, что раньше это не написал.
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
27.10.2012, 18:12
Можно и структурой обойтись:
C++
1
2
3
4
5
6
7
8
9
10
struct Book {
// Поля структуры книги такие как название, автор и т.д.
};
 
struct Kart {
// Поля которые описывают картотеку
Book* books; // Массив книг (или указателей на книгу Book** books)
unsigned int bookNum; // Число книг в картотеке
unsigned int max; // Максимальный размер массива
};
0
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 4
27.10.2012, 19:10  [ТС]
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Можно и структурой обойтись:
C++
1
2
3
4
5
6
7
8
9
10
struct Book {
// Поля структуры книги такие как название, автор и т.д.
};
 
struct Kart {
// Поля которые описывают картотеку
Book* books; // Массив книг (или указателей на книгу Book** books)
unsigned int bookNum; // Число книг в картотеке
unsigned int max; // Максимальный размер массива
};
А как это использовать, как занести в Book* books книгу?
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
27.10.2012, 19:19
C++
1
2
3
4
5
6
Book book1;
Kart kart;
kart.max = 10;
kart.books = new Book[kart.max];
kart.bookNum = 1;
kart.books[0] = book1;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2012, 19:19
Помогаю со студенческими работами здесь

Динамические структуры данных
(можно с пояснением,что-то не понимаю) Есть строка символов, признаком конца которой является ;. В строке могут быть фигурные, круглые,...

Информационные динамические структуры
Задание: Написать программу, в которой создаются динамические структуры и выполнить их обработку в соответствии со своим вариантом. ...

Динамические структуры: списки
Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент перед первым элементом со значением 55.

Динамические структуры. Стек
Дан текстовый файл с изображением целых чисел, которые необходимо записать в список L1. Используя структуру &quot;Stack&quot;, удалить из...

Динамические структуры данных
Здравствуйте. Есть такой код в таких файлах: Основной .cpp-файл программы#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru