c как создать динамический указатель на массив в структуре

#c #arrays #struct

#c #массивы #структура

Вопрос:

Я принимаю входные данные от пользователя для количества элементов внутри массива. Массив находится внутри моей структуры ‘Polymer’

 struct Polymer
{
    int length;

    struct Monomer *monomer;

}polymer;
  

В main я создаю новый указатель на массив мономеров и устанавливаю на него указатель монономера в «Polymer»

 struct Monomer *monomers[size];
polymer.monomer = momomers;
  

Я получаю сообщение об ошибке «Присвоение из несовместимого типа указателя», которое, как я предполагаю, связано с тем, что мы преобразуем указатель массива мономеров в мономер. Как мне объявить его как указатель мономерного массива в структуре?

Комментарии:

1. Кроме того, вы должны использовать size_t для размеров массива, длин строк и всего остального, имеющего размер. int имеет знак (вам не нужен массив длиной -1, не так ли?) и не гарантируется, что он будет достаточно большим для правильного хранения размера (или, в патологическом случае, он может быть слишком большим).

Ответ №1:

Вы объявляете массив указателей мономеров, когда вам, вероятно, нужен массив мономеров. Отбросьте * :

 struct Monomer monomers[size];
polymer.monomer = momomers;
  

Ответ №2:

 struct Monomer *monomers[size];
polymer.monomer = momomers;
  

monomers это массив указателей. Они не указывают ни на какие допустимые местоположения и имеют мусорные значения. While Polymer::monomer — это указатель. Массив указателей не совместим по типу только с указателем.

Вместо этого попробуйте —

 struct Monomer monomers[size];
polymer.monomer = momomers;  // 2
  

Теперь это утверждение 2 действительно, потому что массив распадается на указатель.

Комментарии:

1. Это не C , разве это не должно быть Polymer.monomer?

2. @BlackBear — Технически говоря, . оператор должен быть связан с объектом . Вот Polymer имя структуры. Итак, чтобы сказать, что это член, я просто использовал оператор :: .