Разница между заявками int * p и int * p
Не могли бы вы рассказать разницу между объявлением int * p и int * p?
Спасибо...
Ответы
Ответ 1
Существует без разницы.
Это вопрос обозначения, а не семантики. Второй менее вводит в заблуждение, потому что
int *a, b;
ясно объявляет a int*
и a int
, тогда как
int* a, b;
выглядит так, будто он объявляет два указателя, когда он действительно делает то же, что и выше.
Ответ 2
Это хороший вопрос.
-
int* p
- широко используется программистами на С++
-
int* p, q
ошибочно подразумевает, что оба p
и q
являются указателями (приводящими к предпочтению объявления этого на двух строках, что также улучшает читаемость при назначении и упрощает быстрое вырезание/вставку или комментарии конкретных строк/переменных)
-
int* p
визуально отделяет тип от идентификатора
-
*p
однозначно указывает на разыменование (при условии, что вы помещаете пробелы вокруг своего двоичного operator*
ala 2 * 3
)
- в С++
...&x
явно принимает адрес, а ...& x
должен объявлять ссылочную переменную, а ... & ...
- побитовый оператор
-
int *p
- широко используется программистами C
-
int *p, q
четко отражает p
как указатель, а q
не является.
-
int *p
визуально путает тип с идентификатором
- визуально неотличим от разыменования указателя (к лучшему или худшему)
При всем этом предпочтения людей во многом основаны на том, к чему они привыкли.
Ответ 3
Два объявления эквивалентны при объявлении одного указателя. Для получения дополнительной информации см. Ссылку
Ответ 4
эти 2 объявления точно такие же!