Объявление указателей с++

Объясните, пожалуйста, почему символ * при объявлении указателей должен стоять рядом с каждым идентификатором? Разве int* нельзя считать как "отдельный" тип?


Ответы (2 шт):

Автор решения: Harry

Разве int* нельзя считать как "отдельный" тип?

Почему нельзя? Можно. Если сделать его типом. Например -

typedef int * pint;

pint a, b, c;

А иначе - как компилятору понять, что именно вы хотите в объявлении int * a, b;? Вот он и придерживается стандарта :)

→ Ссылка
Автор решения: HolyBlackCat

почему символ * при объявлении указателей должен стоять рядом с каждым идентификатором

Потому что грамматику такую сделали. ¯\_(ツ)_/¯

Объявления имеют вид (упрощенно):

decl-specifier-seq declarator, declarator, ..., declarator

Один декларатор создает одну переменную. В центре него - имя переменной, а вокруг имени могут (но не обязаны) быть *, &, [...], (...) и т. д.

Все остальное попадает в decl-specifier-seq (в вашем случае это int).

Тип каждой переменной определяется по общему для всех переменных decl-specifier-seq, и плюс по информации из декларатора этой конкретной переменной.

Например в int *a, b;:

  • decl-specifier-seq - это int
  • *a - первый декларатор
  • b - второй декларатор

Так что *, как часть декларатора, влияет только на свой декларатор. А int, как часть decl-specifier-seq, влияет на обе переменные.

→ Ссылка