Префикс против двоичного выражения против выражений типа
* - это префиксный унарный оператор для указателей и инфиксный унарный оператор для умножения.Существует особый случай, когда чистый тип - это все, что нужно, поэтому можно увидеть такие вещи, как sizeof(int *)
или void f(int *, char *)
, но это все еще префикс *
для безымянного идентификатора.
Разыменование постфиксав альтернативной вселенной
Интересно отметить, что *
мог быть постфиксным унарным оператором , и в этом случае некоторые вещи в языке могли бы работатьнемного лучше.Во-первых, оператор ->
не был бы необходим:
p->field
p*.field // like Pascal's p^.field
Даже сегодня вы можете использовать:
p[0].field
Также ...
(*x)->y // today
x**.y // alternate universe
*x->y // today
x*.y* // alternate universe
DMR, по-видимому, заявлял 1 в одном документе, что он перешел бы на разыменование постфикса на ранней стадии, но C уже слишком хорошо обосновался.Синтаксис выражения в любом случае является достаточно работоспособным, но он также распутал бы синтаксис объявления C и избавил бы от необходимости читать их наизнанку, с чем у людей постоянно возникают проблемы:
int *fp();
int fp()*; // alternate universe
int (*pf)();
int pf*(); // alternate universe
int *(*pfp)();
int pfp*()*; // alternate universe
1. См. Развитие языка C. , Деннис М. Ритчи