Оператор a-> b канонически означает (* a) .b.
Так что, в отличие от ".", Он разыменует свой первый аргумент.
Я могу ошибаться в этом вопросе, но я понимаю, что это не «официально» часть C (вы конкретно упоминаете C в вопросе). Это конструкция C ++, которую большинство поставщиков компиляторов C добавили в C. Однако я должен признать, что я не поспевал за изменениями в C, так что я могу быть совершенно неправ в этом.
В C ++ есть и другие отличия. Оператор "->" перегружен, где как "." нет.