Есть ли разница между 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 *
- это
тип.