Каждая переменная связана с некоторым хранилищем (по крайней мере, на C). Так что это для S1
и S2
. Но S1
является указателем, поэтому требуется хранение указателя на структуру, S2
- это структура, в которой выделяется хранилище для полной структуры. Разница заключается в том, что S1
является косвенным, означает, что его хранилище не содержит структуру, а адрес структуры, если вы хотите, чтобы она была привязана к структуре, вам необходимо предоставить ему соответствующий адрес. Либо:
S1 = &S2;
где &
оператор, взявшие адрес S2
. Теперь S1
является ссылкой на S2
. Или:
S1 = malloc(sizeof(struct student));
где malloc
(динамически) выделяет память для структуры и возвращает его адрес (в случае успеха).
Кто сказал, что что-то требуется? –
Память * * автоматически выделяется для S1. Достаточно достаточно памяти для представления указателя. Вы можете указать, что где угодно, даже нераспределенная память, это будет действительный указатель, указывающий на недопустимый 'struct student'. – Tibrogargan
Память для самого указателя выделяется, но пока вы не выделите «ученик» и не назначьте указатель указать местоположение этой памяти, указатель будет указывать на мусор, если он не инициализирован. S2 выделяется так же, как указатель S1; но один - «ученик», а один - указатель.Память самого указателя и то, на что он указывает, - совершенно разные вещи. –