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

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

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

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

someType* somePtr; 

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

 someType *somePtr; 

Это уже некоторое время подталкивает меня орехами. Есть ли стандартный способ объявления указателей? Неважно, как объявляются указатели? Раньше я использовал обе декларации, и я знаю, что компилятору все равно, как это происходит. Однако тот факт, что я видел указатели, объявленные двумя разными способами, заставляет меня поверить, что за этим стоит причина. Мне любопытно, является ли какой-либо метод более читабельным или логичным в некотором роде, который мне не хватает.

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

Стиль

 someType* somePtr; 

подчеркивает тип переменной указателя. Он говорит, по существу, «тип somePtr – это указатель на некоторый someType ».

Стиль

 someType *somePtr 

подчеркивает тип заостренных данных. Он говорит, по существу, «тип данных, на которые указывает некоторый somePtr – это некоторый someType ».

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

Помещая его в середину (как someType * somePtr ) пытается избежать someType * somePtr к одному.

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

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

Это не имеет значения, это личное предпочтение.

Некоторым людям нравится держать тип вместе:

 int* p; 

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

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

Со временем вы просто не заметите этого и согласитесь с обоими вариантами.

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

 int *pValue; 

читает «разыменование pValue – это int», тогда как программист на C ++ думает в «типах», поэтому

 int* pValue; 

читает «тип pValue – это указатель на int». Компилятор вообще не видит разницы. Однако вы обнаружите, что программист C настаивает на «семантике значений» при программировании на C ++.

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

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

Каждый раз, когда я когда-либо видел

 TheType *myPointer 

потому что вы объявляете POINTER типа TheType. Подобное объявление

 TheType myVar 

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

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

 TheType myVar, *myPointer; 
  • Что такое «этот» указатель?
  • Зачем использовать двойной указатель? или Зачем использовать указатели для указателей?
  • Почему я могу изменить локальную константную переменную с помощью указателей, но не глобальную в C?
  • Указатель против массива в C, нетривиальная разность
  • Как включить динамический массив INSIDE a struct в C?
  • Почему полезен указатель «точка-volatile», например «volatile int * p»?
  • Причина передачи указателя по ссылке в C ++?
  • Как получить доступ к локальной переменной из другой функции с помощью указателей?
  • С массивами, почему это так, == 5 ?
  • Получение размера malloc только с возвращенным указателем
  • C ++ typedef интерпретация константных указателей
  • Давайте будем гением компьютера.