Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2011, 22:48   #1
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию объявление динамической структуры С++

я правильно объявил динамическую структуру?

Код:
#include <iostream>
using namespace std;

struct avtobus
{
int nomer_avtob;
char familia[30];
int nomer_marsh;
bool vatp;
};

int main(void)
{
int kolvo_avtob;
cout<<" vvedite kolichestvo avtobusov ";
cin>>kolvo_avtob;
avtobus * iPtr = new int [kolvo_avtob];

return 0; }
как теперь к ней правильно обращаться?
и к ее полям?

Последний раз редактировалось severest; 01.05.2011 в 22:55.
severest вне форума Ответить с цитированием
Старый 02.05.2011, 01:18   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

нет, не правильно
нужно так
Код:
avtobus* pA = new avtobus[kolvo_avtob];
avtobus* p=pA;
...

for (int i=0; i<kolvo_avtob; i++) {
p->nomer_marsh=i; // вариант обращения через указатель
p++;
}

for (int i=0; i<kolvo_avtob; i++) {
std::cout << pA[i].nomer_marsh << '\n'; // по-индексу
}
onewho вне форума Ответить с цитированием
Старый 02.05.2011, 08:52   #3
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

а что значит строка avtobus* p=pA
severest вне форума Ответить с цитированием
Старый 02.05.2011, 09:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это значит (читай комментарии) что к массиву будут обращаться не по индексу, как это происходит с обычными массивами, а через указатель, в цикле передвигая его на следующий элемент.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2011, 09:21   #5
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

avtobus* pA = new avtobus[kolvo_avtob]
а разве вот этой строки было недостаточно, здесь же тоже указатель pA
severest вне форума Ответить с цитированием
Старый 02.05.2011, 09:36   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Структуру надо объявлять так:

Код:
struct avtobus
{
int nomer_avtob;
char familia[30];
int nomer_marsh;
bool vatp;
avtobus *avtobus_ptr;
};
Ещё нужно несколько переменных-указателей.

avtobus * start_avtobus_ptr;// Указывает на первую структуру в списке
avtobus * new_avtobus_ptr;// Указатель на текущую стрктуру
avtobus * old_avtobus_ptr; // Указавает на очередную структуру

Заполнение списка идёт так:

Код:
new_awtobus_ptr = new avtobus;

// Заполнение структуры значениями
new_avtobus_ptr->avtobus_ptr = NULL;
if(start_avtobus_ptr == NULL) start_avtobus_ptr = NULL;
else old_avtobus_ptr->avtobus_ptr = new_avtobus_ptr;
old_avtobus_ptr = new_avtobus_ptr;
Вот, примерно так.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 02.05.2011, 10:47   #7
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

start new old это специальные слова?
severest вне форума Ответить с цитированием
Старый 02.05.2011, 12:43   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Сообщение от severest Посмотреть сообщение
avtobus* pA = new avtobus[kolvo_avtob]
а разве вот этой строки было недостаточно, здесь же тоже указатель pA
достаточно, но если ты будешь ей манипулировать (++,--) то во 1-х навсегда потеряешь доступ к началу массива структур, во 2-х при освобождении памяти если ты не вернешь этот указатель на место -будет критическая ошибка.
onewho вне форума Ответить с цитированием
Старый 02.05.2011, 18:55   #9
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

Что то сложновато, лучше сделаю, константы (5, 10, 15, 50)
и выбор в switch разных структур, только это же память будет есть?
severest вне форума Ответить с цитированием
Старый 04.05.2011, 20:32   #10
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

Код:
#include <iostream>
using namespace std;

struct avtobus
{
 int nomer_avtob;
 char familia[30];
 int nomer_marsh;
 bool vatp;
};
const int D5=5;
const int D10=10;
const int D50=50;
const int D100=100;
const int D500=500;

int main(void)
 {
 int D;
 cin<<D;
 switch (D) {
  case '5': spisok[D5]; break;
  case '10': spisok[D10]; break;
  case '50': spisok[D50]; break;
  case '100': spisok[D100]; break;
  case '500': spisok[D500]; break;
 }
 return 0; }
Такое будет работать?
severest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самая быстрая сортировка динамической структуры данных Mixim Общие вопросы .NET 1 28.11.2010 10:02
Объявление указателей Valter Общие вопросы C/C++ 5 04.04.2010 12:09
Сортировка динамической структуры Lemo Помощь студентам 7 13.10.2009 18:58
Сохранение в файл сложной динамической структуры _Инженер_ Общие вопросы Delphi 24 20.10.2008 09:38