Объявление указателей; звездочка слева или право на пространство между типом и именем? [дубликат]

Возможные дубликаты:
Что имеет больше смысла - символ* строка или символ *строка? Объявления указателя в C++: размещение звездочки

Я видел смешанные версии этого в большом количестве кода. (Это относится к C и C++, между прочим.) Люди, кажется, объявляют указатели одним из двух способов, и я понятия не имею, какой корректен, того, если он даже имеет значение.

Первым путем это для помещения звездочки, смежной имя типа, как так:

someType* somePtr;

Второй путь состоит в том, чтобы поместить звездочку, смежную название переменной, как так:

someType *somePtr;

Это сводило меня с ума в течение некоторого времени теперь. Есть ли какой-либо стандартный способ объявить указатели? Даже имеет значение, как указатели объявляются? Я использовал оба объявления прежде, и я знаю, что компилятор не заботится, какой путь это. Однако то, что я видел указатели, объявленные двумя различными способами, приводит меня полагать, что существует причина позади него. Мне любопытно, если или метод более читаем или логичен в некотором роде, что я отсутствую.

116
задан Community 23 May 2017 в 11:46
поделиться

6 ответов

Это вопрос предпочтений и в некотором роде священная война, как и стиль скрепки.

Стиль

someType* somePtr;

подчеркивает тип переменной-указателя. По сути, он говорит: «Тип somePtr - это указатель на- someType ».

Стиль

someType *somePtr

подчеркивает тип данных, на которые указывают. По сути, он говорит: «Тип данных, на который указывает somePtr , - это someType ».

Они оба означают одно и то же, но это зависит от того, является ли ментальная модель данного программиста при создании указателя «сфокусированной», так сказать, на данных, на которые указывает указатель, или на переменной-указателе.

Помещение его посередине (как someType * somePtr ) пытается избежать фиксации любого из них.

100
ответ дан 24 November 2019 в 02:12
поделиться

Я думаю, что размещение звездочки рядом с именем переменной будет более понятным.

Вы можете ошибочно объявить someType * one, two; , думая, что они оба являются указателями, но только переменная one является указателем; two - это просто someType . Объявление someType * one, * two позволяет избежать этой проблемы.

18
ответ дан 24 November 2019 в 02:12
поделиться

Это не имеет значения. Кто-то подойдет и закроет вопрос как обман, а кто-то другой покажет, как ломается способ int * a , если вы объявляете несколько переменных в тех же объявлениях, а int * a ] лучше отражает синтаксическую структуру кода, а другой специалист покажет, что Страуструп предпочитает способ int * a .

Множество мнений, но здесь нет «правильного» пути.

117
ответ дан 24 November 2019 в 02:12
поделиться

Разница возникла из-за того, что C ++ добавил более сильную систему типов поверх C. Программисты AC обычно думают терминами of "values", поэтому

int  *pValue;

читает "разыменование pValue является int" , тогда как программист C ++ мыслит "типами", поэтому

int* pValue;

читает "тип pValue является указателем на int" {{1 }} Компилятор, конечно, не видит никакой разницы. Однако вы обнаружите, что именно программисты на C настаивают на «семантике значений» при программировании на C ++.

22
ответ дан 24 November 2019 в 02:12
поделиться

Неважно, это личное предпочтение.

Некоторым нравится сохранять тип вместе:

int* p;

Другие люди говорят, что он должен идти рядом с переменной по следующим причинам:

int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.

Со временем вы просто пропустите это и примете оба варианта.

51
ответ дан 24 November 2019 в 02:12
поделиться

Я всегда видел

TheType *myPointer

, потому что вы объявляете УКАЗАТЕЛЬ типа TheType. Аналогичное объявление

TheType myVar

будет объявлением переменной экземпляра типа TheType.

Также вы можете сделать это четко и легко читаемым

TheType myVar, *myPointer;
-3
ответ дан 24 November 2019 в 02:12
поделиться