C déclarations multiples sur une seule ligne

Que se passe-t-il lorsque je déclare plusieurs variables sur une seule ligne? par exemple

int x, y, z; 

Tous sont ints. La question est que sont y et z dans la déclaration suivante?

 int* x, y, z; 

Sont-ils tous des pointeurs?

Seul x est un pointeur sur int; y et z sont des ints réguliers.

C’est l’un des aspects de la syntaxe de déclaration en C qui surprend certains. C utilise le concept de déclarateur , qui introduit le nom de la chose déclarée ainsi que des informations de type supplémentaires non fournies par le spécificateur de type . Dans la déclaration

 int* x, y, z; 

les déclarants sont *x , y et z (c’est un accident de la syntaxe C que vous pouvez écrire int* x ou int *x , et cette question est l’une des raisons pour lesquelles je recommande d’utiliser le second style). L’intégrité de x , y et z est spécifiée par le spécificateur de type int , tandis que le pointeur de x est spécifié par le déclarant *x (IOW, l’expression *x est de type int ).

Si vous voulez que les trois objects soient des pointeurs, vous avez deux choix. Vous pouvez soit les déclarer explicitement comme des pointeurs:

 int *x, *y, *z; 

ou vous pouvez créer un typedef pour un pointeur int:

 typedef int *iptr; iptr x, y, z; 

Rappelez-vous simplement que lors de la déclaration d’un pointeur, le * fait partie du nom de la variable, pas du type.

Dans votre première phrase:

 int x, y, z; 

Ils sont tous int s.

Cependant, dans le second:

 int* x, y, z; 

Seul x est un pointeur sur int . y et z sont tout simplement int .

Si vous voulez qu’ils soient tous des indicateurs vers l’ int vous devez faire:

 int *x, *y, *z; 

Seul x est un pointeur int. Y et Z seront juste int. Si vous voulez trois pointeurs:

 int * x, * y, * z; 

Il est important de savoir que, en C, la déclaration imite l’utilisation. L’opérateur * unaire est juste associatif en C. Ainsi, par exemple dans int *x x est du type pointeur sur un int (ou int-star) et dans int x , x est du type int.

Comme d’autres l’ont également mentionné, dans int* x, y, z; le compilateur C déclare x comme un int-star et, y et z comme un entier.