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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2011, 11:53   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Динамические массивы структур

Всем привет. Я понимаю, что это азы, но всё же. Объясните пожалуйста, что означает вот эта запись
Код:
typedef struct StructName {
//Поля
} StructName, *LPStructName; // это интересует больше всего.
Следующее, мне нужен массив этих структур, массив динамический, как правильно сделать, чтобы можно было потом доступ к его элементам получить? При чем после некоторых действий я буду увеличивать длину массива на 1 элемент.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 24.03.2011, 12:43   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Ну в данном случае происходит typedef-объявление. Тогда в данном коде, имя структуры убери. Оно лишнее. Короче, что бы было понятно, то что ты привел можно записать так:
Код:
struct StructName
{
    int i;
};

typedef StructName* LPStructName;

int main()
{
    LPStructName a = new StructName;
    a->i = 123;

    std::cout << a->i << std::endl;

    return 0;
}
profi вне форума Ответить с цитированием
Старый 24.03.2011, 12:50   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

profi, спасибо, я так понял, что здесь
Код:
    LPStructName a = new StructName;
память выделяется только для одной структуры. Будьте добры объясните пожалуйста вторую часть вопроса. Вот я к примеру так делаю, но я не могу получить доступ к указателям:
Код:
void MyFunc (); {
    LPStructName a = new StructName (); //такие скобки используются когда конструткор существует?
    //устанавливаю значение полей
    MyFunc ();
};
мне просто надо добавлять такие же структуры к массиву.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 24.03.2011, 12:56   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
LPStructName a = new StructName (); //такие скобки используются когда конструткор существует?
Аналогично как в классах. Если используется конструктор по умолчанию (без параметров) для создания объекта можно писать или не писать скобки. По выбору .
profi вне форума Ответить с цитированием
Старый 24.03.2011, 13:00   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

profi, спасибо, а в рекурсивной функции мой подход правильный? Просто я не пойму, как добавлять новый указатель и получать из него значение. Я получаю указатель, там хранятся данные, но после следующего вызова рекурсии в эту переменную пишется следующий адрес и я теряю предыдущий, какой выход из этой ситуации? Создать подобный массив и так до бесконечности?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 24.03.2011, 13:03   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
#include <iostream>

struct StructName
{
    int i;

    StructName()
    {
        std::cout << "StructName()" << std::endl;
    }

    ~StructName()
    {
        std::cout << "~StructName()" << std::endl;
    }
};

typedef StructName* LPStructName;

int main()
{
    LPStructName a = new StructName();
    //LPStructName a = new StructName; // аналогично первому

    a->i = 123;
    std::cout << a->i << std::endl;

    delete a;

    return 0;
}
Ты говорил, что тебе нужно добавлять элементы типа - структура в массив динамически. Т.е. ты не знаешь его точный размер. Тогда используй контейнер vector.

Последний раз редактировалось profi; 24.03.2011 в 13:05.
profi вне форума Ответить с цитированием
Старый 24.03.2011, 13:06   #7
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

profi, всё понятно объяснили!
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы структур :( ( Proghelper Помощь студентам 3 12.12.2010 18:17
Массивы структур. Fiber Общие вопросы C/C++ 4 29.11.2010 21:16
массивы структур Tirendus Общие вопросы C/C++ 10 24.05.2010 15:17
[Assembler] Массивы структур Opiym Помощь студентам 4 26.02.2010 18:52
массивы структур vasek123 Общие вопросы C/C++ 25 07.03.2009 20:13