Только x
- указатель на int; y
и z
- обычные целые числа.
Это один из аспектов синтаксиса объявления C, который запутывает некоторых людей. C использует концепцию декларатора , которая вводит имя объявленной вещи вместе с дополнительной информацией о типе, не предоставляемой спецификатором типа . В декларации
int* x, y, z;
деклараторами являются *x
, y
и z
(это случай синтаксиса C, когда вы можете написать int* x
или int *x
, и этот вопрос является одной из нескольких причин, почему я рекомендую использовать второй стиль). Целочисленность x
, y
и z
определяется спецификатором типа int
, а указатель x
определяется декларатором *x
(IOW, выражение *x
имеет тип int
).
Если вы хотите, чтобы все три объекта были указателями, у вас есть два варианта. Вы можете явно объявить их как указатели:
int *x, *y, *z;
или вы можете создать typedef для указателя типа int:
typedef int *iptr;
iptr x, y, z;
Просто помните, что при объявлении указателя *
является частью имени переменной, а не типа.