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

Тема в разделе "Общие вопросы по С и С++", создана пользователем vani2, 14 дек 2010.

Наш партнер Genesis Hackspace
  1. vani2

    vani2 Гость

    Здравствуйте.
    Требуется для задачи создать массив неизвестной длины из указателей на структуру.
    Как будет выглядеть на С(ANSI)?
    Моё предположение:
    <!--shcode--><pre><code class='c'>struct tablic *x[];[/CODE]
    Если так , то как затем выделять память под новый указатель?
    Моё предположение:
    <!--shcode--><pre><code class='c'>*(x+i)=(struct tablic*)malloc(sizeof(struct tablic));[/CODE]
    Заранее всем благодарен.

    Мои предположения проверки не прошли-как-то по-другому должно быть.
     
  2. Гость

    Код (Text):
    struct tablic *x[];
    *(x + 1) = (struct tablic *) malloc (sizeof (struct tablic));
    Компилятор разразится страшной бранью.
    Вы создали статический массив. Статический массив получает длину при инициализации, и эта длина уже НЕ ИЗМЕНЯЕТСЯ.
    На C++ эту задачу я решал так:
    Код (Text):
    tablic **x = new tablic *[i]; // i - длина нашего массива указателей.
    Но если именно на C... Надо будет подумать, т. к. пользуюсь только вышеописанным способом.
     
  3. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    На структурЫ ?? Я правильно понял!?
     
  4. Гость

    Вот, немного подумал и кое-что в голову пришло:
    Код (C++):
    struct tablic **x = (struct tablic **) malloc (sizeof (struct tablic *) * i); // i - длина нашего массива указателей на структуры.
    Чтобы обратиться к элементу массива, делаем так:
    Код (C++):
    *(x + n) // где n - индекс элемента массива.
    Вот пример:
    Код (C++):
    struct tablic **x = (struct tablic **) malloc (sizeof (struct tablic *) * 125);
    memset ((void **) x, 0, sizeof (tablic **) * 125);
    for (int i = 0; i < 125; i++)
    cout << *(x + i) << endl;
    free ((void *) x);
    Правда, для C надо будет выводить через cprintf, но я в этой функции вообще не смыслю. Проверьте, если будут ошибки, сообщайте. На VC++ 6.0 всё нормально компилируется.
     
  5. likenix

    likenix Гость

    Здравствуйте уважаемые форумчане, позвольте внести свою скромную лепту.

    1. struct tablic **x - две звездочки не нужно, если нам конечно не двумерные массивы нужны.
    2. Массив лучше закончить NULL так его легче будет в циклах обходить, или если без NULL как в данном случае придется с массивом таскать переменную с размером массива
    3.
    структуру удобнее объявлять примерно так

    Код (C++):
    typedef struct A
    {
    int a;
    } A;
    тогда в переменную типа A можно просто объявить как в C++, то есть без ключевого слова struct.

    Но это все не существенно конечно и дело вкуса.
     
Загрузка...
Похожие Темы - Массив указателей
  1. Faradei
    Ответов:
    0
    Просмотров:
    38
  2. sashasluva
    Ответов:
    1
    Просмотров:
    94
  3. Shandrik
    Ответов:
    4
    Просмотров:
    153
  4. Вероника Эл
    Ответов:
    5
    Просмотров:
    365
  5. NickProstoNick
    Ответов:
    15
    Просмотров:
    741

Поделиться этой страницей