Есть ли разница между int * x и int * x в С++?

Я возвращаюсь к своим исследованиям на С++ и действительно пытаюсь понять основы. Указатели всегда причиняли мне неприятности, и я хочу убедиться, что я действительно понял это, прежде чем продолжать и путаться по дороге.

К сожалению, с самого начала меня загнали в тупик несоответствие в учебниках, которые я читаю. Некоторые делают объявления указателей таким образом:

int *x

а некоторые делают это следующим образом:

int* x

Теперь первая из двух, по-видимому, является наиболее распространенной. Это расстраивает, потому что второй имеет для меня гораздо больше смысла. Когда я читаю int * x, я читаю "Вот int, а его имя - * x", что не совсем правильно. Но когда я читаю второй, я вижу, что "здесь указатель int, а его имя x", что довольно точно.

Итак, до того, как я построю свою собственную ментальную карту, существует ли разница между ними? Могу ли я стать прокаженным, если я сделаю это вторым способом?

Спасибо.

Ответ 1

Знаменитый Bjarne Stroustrup, известный для создания и развития С++, сказал...

Выбор между "int * p;" и "int * p;" не о праве и неправильно, но о стиле и акценте. C подчеркнутые выражения; декларации часто считались не более чем необходимым злом. С другой стороны, С++ имеет большой упор на типы.

"Типичный программист С" пишет "int * p;" и объясняет это "* p - это то, что является синтаксисом подчеркивания int и может указывать на C (и С++) грамматику декларации, чтобы аргументировать правильность стиля. В самом деле, * привязывается к имени p в грамматике.

" Типичный программист на С++" пишет "int * p;" и объясняет это "p является указатель на тип подчеркивания int. Действительно, тип p является int *. я явно предпочитают этот акцент и считают его важным для использования более продвинутые части С++.

Итак, нет никакой разницы. Это всего лишь стиль кода.

От здесь

Ответ 2

Для компилятора они имеют точно такое же значение.

Стилистически, есть аргументы для и против обоих.

Один аргумент состоит в том, что первая версия предпочтительнее, потому что вторая версия:

int* x, y, z;

означает, что x, y и z - все указатели, которые они не являются (только x).

Первая версия не имеет этой проблемы:

int *x, y, z;

Другими словами, поскольку * связывается с именем переменной, а не с типом, имеет смысл разместить его рядом с именем переменной.

Контр-аргумент состоит в том, что нельзя смешивать указатель и не указательный тип в том же объявлении. Если вы этого не сделаете, приведенный выше аргумент не применяется, и имеет смысл разместить * рядом с int, потому что это часть этого типа.

Какую школу вы решите подписаться, вы столкнетесь с обоими стилями в дикой природе и другими (некоторые пишут int * x).

Ответ 3

Никакой разницы.

Это только вопрос стиля.

Я лично предпочитаю это:

int *x;

над этим,

int* x;

Потому что последнее менее читаемо, когда вы объявляете много переменных в одной строке. Например, см. Это:

int* x, y, z;

Здесь x является указателем на int, но также являются указателями y и z? Похоже, что они указатели, но это не так.

Ответ 4

Нет никакой разницы. Я использую форму int* x, потому что я предпочитаю хранить весь тип, сгруппированный вместе, от имени, но этот тип распадается на более сложные типы, такие как int (*x)[10].

Некоторые люди предпочитают int *x, потому что вы можете прочитать его как "разыменование x дает вам int". Но даже это разваливается, когда вы начинаете использовать ссылочные типы; int &x не означает, что получение адреса x даст вам int.

Еще одна причина, по которой вы можете предпочесть int *x, состоит в том, что в терминах грамматики int представляет собой последовательность спецификатора объявления, а *x - декларатор. Это две отдельные части декларации. Это становится более очевидным, если у вас есть несколько деклараторов типа int *x, y;. Было бы легче увидеть, что y не является указателем в этом случае.

Однако многие люди, такие как я, предпочитают не объявлять несколько переменных в одном объявлении; в С++ не так уж много нужно. Это может быть другой причиной предпочтения формы int* x.

Существует только одно правило: быть последовательным.

Ответ 5

Абсолютно никакой разницы.

Ответ 6

Никакой разницы. Я обычно предпочитаю

int* x

Из-за того, что "x" имеет тип int *.

Ответ 7

В компилятор они одинаковы

Но в то же время разница является читабельностью, когда имеется несколько переменных

int * x, y

Однако это более вводит в заблуждение

int * x, y

Ответ 8

Оба - одно и то же.

Первое, хотя и предпочтительнее. Предположим, вы хотите объявить 2 указателя p и q в одной строке.

int * p, q;

Это означает, что "p" является указателем на int, а "q" - int.

Правильный синтаксис:

int * p, * q;

Следовательно, мы включаем * в имя указателя.

Ответ 9

Это тип стиля кодирования. Нет никакой разницы, просто вопрос предпочтения, как вы сказали себе. Надеюсь, вы очистите. Наслаждайтесь кодированием

Ответ 10

На мой взгляд, в выражении int * x,y; x и y есть имена переменных. Когда эти имена объявляются программистом таким образом, это означает, что они имеют same type и int * - это тип.