Этот ответ основан на моем понимании вашего вопроса, а именно: я думаю, что ваша проблема заключается в объявлении массива с использованием указателей и указателя.
Как вы знаете, каждая переменная - это ячейка памяти, и у каждой ячейки памяти есть свой адрес. Указатель любого данного типа содержит адрес ячейки памяти. Для вашего случая рассмотрим следующий пример.
struct charact * a;
мы определяем указатель 'a' типа 'struct charact', так как сейчас указатель 'a' содержит мусорное значение, и если вы попытаетесь присвоить ему что-то, вы получите ошибку, потому что когда вы присваиваете свою систему, вы переходите к 'a' принимает значение мусора и воспринимает его как адрес памяти, куда он должен поместить данное значение, что невозможно, поскольку адрес мусора, вероятно, вам не назначен. Чтобы присвоить значение в 'a', вы сначала должны инициализировать 'a' с помощью malloc () или любых других функций выделения памяти. При этом malloc () вернет вам адрес памяти, а затем вы сможете начать и присвоить значения «a».
Теперь перейдем к вашему вопросу: определение «a» может выступать в качестве массива или указателя на структуру. Это зависит от того, сколько памяти вы назначаете переменной с помощью malloc (). Возможно, вы бы присвоили значение следующим образом -
a = (struct charact *) malloc (sizeof (struct charact) * n)
если n> 1, то вы получите адрес памяти, который способен хранить больше, чем на struct charact, и, следовательно, будет работать как массив, и, если n = 1, вы можете хранить только один struct charact, и, следовательно, это единое целое.