#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
имя структуры. Итак, чтобы сказать, что это член, я просто использовал оператор::
.