Подтвердить что ты не робот

C несколько однострочных объявлений

Что происходит, когда я объявляю несколько переменных в одной строке? например.

int x, y, z;

Все - ints. Вопрос в том, что y и z в следующем утверждении?

int* x, y, z;

Все ли они указатели int?

4b9b3361

Ответ 1

Только 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;

Просто помните, что при объявлении указателя * является частью имени переменной, а не типа.

Ответ 2

В первом предложении:

int x, y, z;

Все они int s.

Однако во втором:

int* x, y, z;

Только x является указателем на int. y и z равны int s.

Если вы хотите, чтобы все они были указателями на int, вам нужно сделать:

int *x, *y, *z;

Ответ 3

Только x является указателем на int. Y и Z будут просто int. Если вам нужны три указателя:

int * x, * y, * z;

Ответ 4

Важно знать, что в C используется выражение mimics. Унарный оператор является правильным ассоциативным в C. Так, например, в int *x x имеет указатель на тип int (или int-star) и в int x, x имеет тип int.

Как отмечали другие, в int* x, y, z; компилятор C объявляет x как int-star и y и z как целое.