Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

Массив структур, непонимание деталей - C++

23.12.2012, 12:16. Просмотров 243. Ответов 5
Метки нет (Все метки)

Всем добрый день.
Есть несколько маленьких вопросов по массивам структур. И извините за странные названия переменных.

я создаю структуру такого типа
C++
1
2
3
4
5
6
7
class Lancuch
{
public:
    char cos;
    Lancuch * nastepny;
};
Lancuch * poczatek = NULL;

в main создаю свой массив структур и пытаюсь создать массив в котором буду хранить начало каждого списка
C++
1
2
Lancuch * elem= new Lancuch[n]; // массив структур
    Lancuch * poczatek= new Lancuch[n] = NULL; //сюда хочу записывать начало каждого элемента из массива
И тут сразу же первый вопрос
C++
1
Lancuch * poczatek= new Lancuch[n] = NULL;
Нормально ли так "нуллить" каждый элемент массива?


Дальше пытаюсь добавлять данные к выбранному элементу массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        int numer;
    char p;
    cin >> numer;
    cin >> p;
    if (poczatek==NULL)
    {
        (elem+numer)->cos=p;
        poczatek=(elem+numer); // для того чтобы все работало по задумке,
        elem->nastepny=NULL;   //тут должно быть (poczatek+numer)=(elem+numer);
    }                                        //но именно так не работает и выкидывает ошибку
    else
    {
        (elem+numer)->nastepny = new Lancuch;
        elem= (elem+numer)->nastepny;   // так же как и тут, мне кажется что для того чтобы работало нужно
        (elem+numer)->cos=p;                // написать (elem+numer)= (elem+numer)->nastepny;
        (elem+numer)->nastepny=NULL;
 
    }
В двух местах которые я прокомментировал выдает ошибку, я просто не могу понять из-за чего. Подскажите что нужно исправить и из-за чего не работает?

и последний вопрос. Может лучше тогда просто в структуру добавить
C++
1
Lancuch * poczatek;
просто чтобы каждый элемент тогда сохранял в себе указатель на первый?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 12:16     Массив структур, непонимание деталей
Посмотрите здесь:

Блочная сортировка структур (Отсортировать массив структур по фамилии) - C++
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив структур по фамилии.

Массив структур, сохранение начала каждой из структур - C++
Я создал такую структуру class Lancuch { public: char cos; Lancuch * nastepny; }; Lancuch * poczatek=NULL; cin >>...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

Непонимание условия задачи - C++
Помогите пожалуйста понять, почему тест не принимает задачу? Всё правильно выводит. Возможно не так нужно вводить значения? И ещё вопрос:...

Использование классов. (или непонимание написания:) - C++
Объявить класс «натуральное число» и определить его методы. Определить число, полученное из заданного натурального числа n, путем...

Массив структур - C++
Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя; знак зодиака; дата рождения(массив из трех чисел). Написать...

Массив структур - C++
https://drive.google.com/file/d/0B2YGdPmpJULzYVJJUTl5bmk5VEE/view?usp=sharing

Массив структур - C++
С помощью массива структур описать каталог компьютерных игр, предусмотрев следующие характеристики: название, производитель, год издания,...

Массив структур - C++
Доброй ночи! Есть задание c массивом структур. Надо было нaпиcaть пpoграммy ввода и удаления инфopмации o coтрyдникe c указанным вoзpастoм....

Массив структур в с++ - C++
Условие: Создать массив структур, используя данные из задания. Создать программное приложение, которое включает его обработку с...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
2561 / 1783 / 251
Регистрация: 08.06.2007
Сообщений: 6,910
Записей в блоге: 4
23.12.2012, 12:58     Массив структур, непонимание деталей #2
Вы присваиваете NULL не элементам структуры, а тому указателю, который вернула вам операция new. При этом память выделенную под массив вы сразу же потеряли.
Дальше непонятно, какой тип у elem. Если это указатель на структуру, то прибавление к нему целого числа сдвинет указатель не на целое число структур, а на целое число байтов. Так что скорее всего после этой операции указатель будет указывать не на начало очередной структуры, а в ее середину.
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
23.12.2012, 13:23  [ТС]     Массив структур, непонимание деталей #3
спасибо за ответы, а как тогда выбирать в какаю именно структур из массива я буду записывать?
palva
2561 / 1783 / 251
Регистрация: 08.06.2007
Сообщений: 6,910
Записей в блоге: 4
23.12.2012, 13:54     Массив структур, непонимание деталей #4
Извините, был неправ. Сдвиг действительно происходит не по байтам, а по элементам массива. Если же отвечать на ваш вопрос, то лучше использовать синтаксис массива. Инициализировать каждую структуру можно прописав в нее конструктор по умолчанию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
class Lancuch
{
public:
    char cos;
    Lancuch * nastepny;
    Lancuch() {this->cos='w'; this->nastepny=NULL;}
};
Lancuch * poczatek = NULL;
int main(void)
{
    poczatek = new Lancuch[10];
    int i=5;
    poczatek[i].cos='t';
    char c=(poczatek+i)->cos;
    cout << c << endl; // t
    delete poczatek;
    return 0;
}
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
23.12.2012, 14:20  [ТС]     Массив структур, непонимание деталей #5
Но мне все еще не понятно , как сохранить начало каждой из структур записанных в массиве.
Я пытаюсь сделать такой же массив для сохранения в нем начал, но он вообще не принимает данные значения.
palva
2561 / 1783 / 251
Регистрация: 08.06.2007
Сообщений: 6,910
Записей в блоге: 4
23.12.2012, 14:54     Массив структур, непонимание деталей #6
Указатель на структуру указывает на ее начало. То есть нам надо завести массив указателей и присвоить им указатели. Примерно так.
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
25
26
#include <iostream>
using namespace std;
class Lancuch
{
public:
    char cos;
    Lancuch * nastepny;
    Lancuch() {this->cos='w'; this->nastepny=NULL;}
};
Lancuch * poczatek = NULL;
Lancuch ** begin_poczatek;
int main(void)
{
    int n=10;
    int i;
    poczatek = new Lancuch[n];
    begin_poczatek= new Lancuch* [n];
    for (i=0; i<n; i++) begin_poczatek[i] = &poczatek[i];
    i=5;
    poczatek[i].cos='t';
    char c=begin_poczatek[i]->cos;
    cout << c << endl; // t
    delete begin_poczatek;
    delete poczatek;
    return 0;
}
Yandex
Объявления
23.12.2012, 14:54     Массив структур, непонимание деталей
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru