Кстати, а почему в "С" появилось разделение на "." и "->"?
Это "синтаксический сахар". Если
b - поле структуры
a, а
p - указатель на
a, то
a.b,
(*p).b и
p->b - один и тот же объект, т.е. поле
b структуры, на которую указывает
p.
Создатели C любили краткие формы записи (2 литеры вместо 4), и к тому же уберегли новичков от дурной ошибки: если "забыть" скобки в выражении
(*p).b, получим совершенно другую конструкцию
*p.b (или
*(p.b)), т.е. объект, на который указывает указатель
p.b. Дело в том, что операция выбора поля структуры "
." имеет более высокий приоритет, чем операция разыменования "
*", поэтому при выборе поля структуры через указатель скобки необходимы.
Нет, правда интересно знать, как устроено изнутри, и главное - почему.
Читайте правильные книги. Несколько таких есть в моих обзорах, например,
Expert C Programming: Deep C Secrets и
Tutorial on Pointers and Arrays in C. Почитайте также
блог Дэна Сакса. На несколько интересных статей я уже написал обзоры (
1,
2,
3,
4), но их там гораздо больше. Человеку, который много лет состоял в комитете по стандартизации C и C++, определенно есть что рассказать по теме.