Это сложно, но, возможно, не обязательно так.

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; не будет работать, и это явный недостаток языка, который вы должны иметь в виду.