Имеет ли значение, где я размещаю звездочку при объявлении указателей в C ++? - PullRequest
6 голосов
/ 27 марта 2011

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

Какая разница в этих 3?

1. char* x = /* ... */
2. char *y = /* ... */
3. char * z = /* ... */

Или

1. ClassX* x = /* ... */
2. ClassY *y = /* ... */
3. ClassZ * z = /* ... */

Спасибо за вашу помощь.

Ответы [ 3 ]

13 голосов
/ 27 марта 2011

Нет никакой разницы.Они точно такие же.

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

Единственная ловушка, о которой следует знать, - это когда вы объявляете несколько переменных в одной строке (что вам действительно не следует делать в любом случае, если не по этой причине).Например, в следующем операторе в качестве указателя объявляется только переменная x:

char* x, y;

Сравните это со следующим, что сделает более понятным, какие переменные являются указателями:

char *x, y;

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

2 голосов
/ 27 марта 2011

без разницы, но вы должны обратить внимание, что если вы напишите:

char* x, y;

только x является указателем (первая объявленная переменная), и вы должны ссылаться на них следующим образом:

x = new (char);
*x = 'a';
y = 'b';
0 голосов
/ 27 марта 2011

Algough * иногда помещается рядом с переменной, которая действительно принадлежит объявлению типа.Поэтому следующее:

SomeType *x, *y;

действительно означает

SomeType *x;
SomeType *y;

То же самое относится и к &.Дополнительно *, const и & применяются в порядке их близости к объявленному типу.Например:

const SomeType * const *&x = ...;

будет означать: ссылка на указатель на константный указатель на const SomeType.const можно разместить как до, так и после имени типа.const перед типом применяется перед всеми модификаторами после типа.Также обратите внимание, что это недопустимо:

const SomeType const x = ...;

, поскольку это по сути означает const const SomeType, что не имеет особого смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...