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