Возможные дубликаты:
Что имеет больше смысла - символ* строка или символ *строка? Объявления указателя в C++: размещение звездочкиЯ видел смешанные версии этого в большом количестве кода. (Это относится к C и C++, между прочим.) Люди, кажется, объявляют указатели одним из двух способов, и я понятия не имею, какой корректен, того, если он даже имеет значение.
Первым путем это для помещения звездочки, смежной имя типа, как так:
someType* somePtr;
Второй путь состоит в том, чтобы поместить звездочку, смежную название переменной, как так:
someType *somePtr;
Это сводило меня с ума в течение некоторого времени теперь. Есть ли какой-либо стандартный способ объявить указатели? Даже имеет значение, как указатели объявляются? Я использовал оба объявления прежде, и я знаю, что компилятор не заботится, какой путь это. Однако то, что я видел указатели, объявленные двумя различными способами, приводит меня полагать, что существует причина позади него. Мне любопытно, если или метод более читаем или логичен в некотором роде, что я отсутствую.
Это вопрос предпочтений и в некотором роде священная война, как и стиль скрепки.
Стиль
someType* somePtr;
подчеркивает тип переменной-указателя. По сути, он говорит: «Тип somePtr
- это указатель на- someType
».
Стиль
someType *somePtr
подчеркивает тип данных, на которые указывают. По сути, он говорит: «Тип данных, на который указывает somePtr
, - это someType
».
Они оба означают одно и то же, но это зависит от того, является ли ментальная модель данного программиста при создании указателя «сфокусированной», так сказать, на данных, на которые указывает указатель, или на переменной-указателе.
Помещение его посередине (как someType * somePtr
) пытается избежать фиксации любого из них.
Я думаю, что размещение звездочки рядом с именем переменной будет более понятным.
Вы можете ошибочно объявить someType * one, two;
, думая, что они оба являются указателями, но только переменная one
является указателем; two
- это просто someType
. Объявление someType * one, * two
позволяет избежать этой проблемы.
Это не имеет значения. Кто-то подойдет и закроет вопрос как обман, а кто-то другой покажет, как ломается способ int * a
, если вы объявляете несколько переменных в тех же объявлениях, а int * a
] лучше отражает синтаксическую структуру кода, а другой специалист покажет, что Страуструп предпочитает способ int * a
.
Множество мнений, но здесь нет «правильного» пути.
Разница возникла из-за того, что C ++ добавил более сильную систему типов поверх C. Программисты AC обычно думают терминами of "values", поэтому
int *pValue;
читает "разыменование pValue является int" , тогда как программист C ++ мыслит "типами", поэтому
int* pValue;
читает "тип pValue является указателем на int" {{1 }} Компилятор, конечно, не видит никакой разницы. Однако вы обнаружите, что именно программисты на C настаивают на «семантике значений» при программировании на C ++.
Неважно, это личное предпочтение.
Некоторым нравится сохранять тип вместе:
int* p;
Другие люди говорят, что он должен идти рядом с переменной по следующим причинам:
int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.
Со временем вы просто пропустите это и примете оба варианта.
Я всегда видел
TheType *myPointer
, потому что вы объявляете УКАЗАТЕЛЬ типа TheType. Аналогичное объявление
TheType myVar
будет объявлением переменной экземпляра типа TheType.
Также вы можете сделать это четко и легко читаемым
TheType myVar, *myPointer;