Когда работаете с указателем на структуру, то используете стрелку, а если непосредственно структура (ссылка) - точка:
StructName * strctptr;
strctpptr->field;
StructName strct;
strct.field;
В том случае, когда у вас есть указатель на структуру, нужна стрелка, иначе - точка. Кстати, вроде, это не С, а С++.
strct->field это синтаксический сахар для (*strct).field
Это они оба. C++ -- это указатели на члены-данные и на функции-члены, для разыменования которых нужен объект или указатель на него и которое выполняется операторами .* и ->*
jcmvbkbc, вот не был в этом уверен, как подписал на Си 7 лет назад полгода, так и не брался больше. Помню, что не пользовался тогда стрелками, в отличие от С++. Мб просто не знал, хотя хз, препод должен был донести, вроде.