1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программирован. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление
  2. Чат codeby в telegram перезагрузка. Обсуждаем вопросы информационной безопасности и методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие. Подробнее ...

    Скрыть объявление

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

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

  1. vani2

    vani2 Гость

    Репутация:
    0
    Здравствуйте.
    Требуется для задачи создать массив неизвестной длины из указателей на структуру.
    Как будет выглядеть на С(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. Гость

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

    lazybiz Well-Known Member

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

    Репутация:
    0
    Вот, немного подумал и кое-что в голову пришло:
    Код:
    struct tablic **x = (struct tablic **) malloc (sizeof (struct tablic *) * i); // i - длина нашего массива указателей на структуры.
    Чтобы обратиться к элементу массива, делаем так:
    Код:
    *(x + n) // где n - индекс элемента массива.
    Вот пример:
    Код:
    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 Гость

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

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

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

    Но это все не существенно конечно и дело вкуса.
     
Загрузка...
Похожие Темы - Массив указателей
  1. billerafont
    Ответов:
    0
    Просмотров:
    26
  2. Karatist
    Ответов:
    0
    Просмотров:
    49
  3. Karatist
    Ответов:
    4
    Просмотров:
    108
  4. D3ad ARbuZzz
    Ответов:
    0
    Просмотров:
    146
  5. никитан10
    Ответов:
    8
    Просмотров:
    146

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