Объявление указателей; звездочка слева или справа от пробела между типом и именем? [дубликат]
Возможные Дубликаты:
что имеет больше смысла-char * string или char * string? объявления указателя в C++: размещение звездочки
Я видел смешанные версии этого в большом количестве кода. (Это относится к C и C++, кстати.) Люди, похоже, объявляют указатели одним из двух способов, и я понятия не имею, какой из них правильный, если это даже имеет значение.
первый способ это поставить звездочка рядом с именем типа, например:
someType* somePtr;
второй способ-поставить звездочку рядом с именем переменной, вот так:
someType *somePtr;
Это уже давно сводит меня с ума. Есть ли стандартный способ объявления указателя? Имеет ли вообще значение, как объявляются указатели? Я использовал оба объявления раньше, и я знаю, что компилятору все равно, каким образом это происходит. Однако тот факт, что я видел указатели, объявленные двумя разными способами заставляет меня поверить, что за этим стоит какая-то причина. Мне любопытно, если какой-либо метод является более читаемым или логичным в некотором роде, что мне не хватает.
6 ответов:
это вопрос предпочтения, и что-то вроде священной войны, так же, как стиль скобки.
стиль
someType* somePtr;
подчеркивает тип переменной указателя. Это говорит, по существу, " тип
somePtr
это указатель на -someType
".стиль
someType *somePtr
подчеркивает тип указанных данных. Он говорит, по существу, " тип данных, на которые указывает
somePtr
иsomeType
".они оба означают одно и то же, но это зависит от того, является ли ментальная модель данного программиста при создании указателя "сфокусированной", так сказать, на указанных данных или переменной указателя.
положить его в середине (как
someType * somePtr
) пытается избежать совершения любого из них.
Это не важно. Кто-то сейчас придет и закроет вопрос как дурак, а кто-то еще покажет как
int* a
путь ломается, если вы объявляете несколько переменных в одних и тех же объявлениях в то время какint *a
способ лучше отражает синтаксическую структуру кода, и другой парень покажет, что Страуструп предпочитаетint* a
путь.много мнений, но нет "правильного" пути здесь.
это не имеет значения, это личные предпочтения.
некоторые люди любят держать типа:
int* p;
другие люди говорят, что он должен идти рядом с переменной из-за следующего:
int *p, x;//declare 1 int pointer and 1 int int *p, *x;//declare 2 int pointers.
со временем вы просто забудете об этом и примете оба варианта.
разница возникла из-за того, что C++ добавил более сильную систему типов поверх C. программист C обычно думает в терминах "значений", поэтому
int *pValue;
читает " разыменование pValue является int" в то время как программист на C++ думает в "типах" так
int* pValue;
читает " тип pValue является указателем на int" Компилятор, конечно, не видит никакой разницы. Однако вы обнаружите, что именно программист C настаивает на "семантике значений" при программировании на C++.