Объявление указателей с++
Объясните, пожалуйста, почему символ * при объявлении указателей должен стоять рядом с каждым идентификатором? Разве int* нельзя считать как "отдельный" тип?
Ответы (2 шт):
Разве int* нельзя считать как "отдельный" тип?
Почему нельзя? Можно. Если сделать его типом. Например -
typedef int * pint;
pint a, b, c;
А иначе - как компилятору понять, что именно вы хотите в объявлении int * a, b;? Вот он и придерживается стандарта :)
почему символ * при объявлении указателей должен стоять рядом с каждым идентификатором
Потому что грамматику такую сделали. ¯\_(ツ)_/¯
Объявления имеют вид (упрощенно):
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, влияет на обе переменные.