Если вы хотите people
быть массивом указателей, вы должны объявить его как это:
struct person *people[12];
Помните, что заявление следует использовать и что разыменования имеет более низкий приоритет, чем индексация массива; это означает, что *people[i]
имеет тип struct person
, и, таким образом, people[i]
является указателем на struct person
.
Для инициализации каждой позиции в people
вы вызываете malloc()
, чтобы ваши указатели указывали на допустимую ячейку памяти, достаточную для хранения struct person
. Это так же просто, как:
people[i] = malloc(sizeof(struct person));
Когда вам не нужен people
больше, вы должны помнить, чтобы освободить каждую позицию памяти вы выделенная путем вызова free(people[i])
для каждой позиции i
.
Я заметил, что вы объявили массив для хранения 12 структур. Это может быть опасно, когда кто-то изменяет код: он не будет работать, когда HOW_MANY
больше 12. Вы должны объявить массив того же размера:
struct person *people[HOW_MANY];
Это гарантирует, что ваш массив всегда имеет ровно пространство, необходимое.
UPDATE: Вы должны объявить insert
как получающее массив указателей вместо массива структур:
static void insert (struct person *people[], char *name, int age) { ... }
И people[i].name
недействителен. Поскольку people[i]
является указателем сейчас, что вам нужно сделать это следующим образом:
people[i]->name
Или, что то же самое, (*people[i]).name
.
То же самое применимо к people[i]->age
. Не забудьте изменить это как в main()
, так и внутри insert
.
Кроме того, перейдите i
в insert
вместо переменных static
, если у вас нет веских оснований для этого. Статические переменные используются для функций с внутренним состоянием, и для меня insert
- не совсем тот тип функции, в котором вы хотели бы этого.
(Я уже видел этот вопрос сегодня .... вы или кто-то еще недавно опубликовали этот код). – abelenky
Да, это была, наверное, моя подруга Сара. Она работает над тем же упражнением, что и я. У нее были некоторые ошибки компиляции, которые я, к счастью, не сделал: D Однако я не уверен, как улучшить код. – Sarah