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

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

int x, y, z;

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

int* x, y, z;

Они все - международные указатели?

28
задан Nikolai Ruhe 14 July 2010 в 14:15
поделиться

3 ответа

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

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

60
ответ дан 28 November 2019 в 02:35
поделиться

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

int x, y, z;

Они все ints.

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

int* x, y, z;

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

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

int *x, *y, *z;
8
ответ дан 28 November 2019 в 02:35
поделиться

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

int * x, * y, * z;
7
ответ дан 28 November 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: