Что происходит, когда я объявляю, говорят что несколько переменных относительно одной строки? например.
int x, y, z;
Все - ints. Вопрос - то, что y и z в следующем утверждении?
int* x, y, z;
Они все - международные указатели?
Только 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;
, либо создать определение типа для указателя типа int:
typedef int *iptr;
iptr x, y, z;
Просто помните, что при объявлении указателя *
является частью имени переменной, а не тип.
В вашем первом предложении:
int x, y, z;
Они все int
s.
Однако во втором:
int* x, y, z;
Только x
является указателем на int
. y
и z
- обычные int
ы.
Если вы хотите, чтобы все они были указателями на int
s, вам нужно сделать:
int *x, *y, *z;
Только x является указателем на int. Y и Z будут просто int. Если вам нужны три указателя:
int * x, * y, * z;