Похоже, вы решили пропустить пару-тройку глав по базовым понятиям языка и сразу рвануть к сути.
У вас создается строковый литерал "John", который размещается где-то памяти, а потом вы 4 раза заталкиваете указатель на эту штуку в структуру, так что у вас по сути не 4 строки, а одна.
Вам нужно на каждой итерации вашего цикла делать malloc, чтобы выделить память под строку, а потом копировать туда строку при помощи strncpy или аналога.
Что касается необходимости применения realloc -вам он понадобится, если вы собираетесь реализовывать динамическое наращивание массива. И впредь не задавайте в одном топике больше одного вопроса.