Это сложно, но, возможно, не обязательно так.
TL;DR
По сравнению со стилем int *ptr
я считаю стиль int* ptr
более интуитивным и, следовательно, более удобным для начинающих. Попробуйте, если вы все еще боретесь с указателями!
K&R говорит нам объявить указатель типа int *ptr = &a;
и говорит, что он задуман как мнемоника . Возможно, это верно для программистов с годами или десятилетиями опыта, но для новичка, который только что закончил int a = 2;
часть, это не имеет особого смысла. Чем больше мне приходится думать о деталях, лежащих в основе *ptr
, и тем больше мне приходится напоминать себе, что int *ptr
объявляет указатель на int
, потому что, согласно K&R, int *
— это тип, *
— оператор разыменования, а *ptr
— это int, т.е. еще больше я запутался. Это довольно нелогично, и хотя я недавно привык к этому стилю, я обнаружил, что не одинок в этом.
Хотя я вижу преимущества использования такого стиля в C, его несоответствие системе типов значительно усложняет понимание для новичков. Наоборот, я нахожу стиль C++ гораздо более интуитивным, то есть вы объявляете указатель как int* ptr = &a;
. Таким образом, сразу становится очевидным, что ее тип — int*
, точно так же, как int
и даже int&
(ссылка на C++), переменная, которую мы только что объявили, имеет тип ptr
, точно так же, как a
, а операторы *
и &
— это просто два унарных оператора, а не часть идентификаторов. Единственное, что вы должны помнить, это то, что, как указал Страуструп, если вам нужно объявить несколько указателей с помощью одного объявления, int* x, y;
не будет работать, и это явный недостаток языка, который вы должны иметь в виду.