#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
sortie: 2
Quelqu'un peut-il expliquer comment la sortie est 2?
#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
sortie: 2
Quelqu'un peut-il expliquer comment la sortie est 2?
Quelqu'un peut-il expliquer comment la sortie est de 2?
Dans la déclaration
a = (1, 2), 3;
,
utilisé est un opérateur virgule. En raison de la hausse la priorité de l'opérateur de=
opérateur que celui de l',
de l'opérateur, l'expression opérande(1, 2)
va se lier d'=
comme(a = (1, 2)), 3;
Dans le cas de l'opérateur virgule, l'opérande de gauche d'un opérateur virgule est évalué à un vide d'expression, puis l'opérande de droite est évaluée et le résultat a de la valeur et du type de l'opérande de droite.
Il y a deux virgule opérateurs ici. Pour le premier opérateur virgule dans l'expression
(1, 2)
,1
seront évalués à vide d'expression et puis,2
seront évaluées et seront affectés à l'a
.
Maintenant, effets secondairesa
a eu lieu et, par conséquent, l'opérande de droite de la deuxième opérateur virgule3
sera évaluée et la valeur de l'expression(a = (1, 2)), 3
sera3
.
le résultat:
a = x, y => x
a = (i, j) => j
par conséquent, si nous avons:
x = (1 , 2)
a = (1 , 2) , 3 => 2
Comme l'a dit ici:
L'opérateur virgule sépare des expressions (qui ont de la valeur) d'une manière analogue à la façon dont le point-virgule qui termine déclarations, et des séquences de les expressions sont entre parenthèses, par analogie, à la façon des séquences des déclarations sont placés entre accolades: (a, b, c) est une séquence de expressions séparées par des virgules, qui évalue à la dernière l'expression de c, tandis que {a; b; c;} est une séquence d'instructions, et ne ne pas évaluer à une valeur quelconque. Une virgule peut seulement se produire entre les deux expressions – virgules expressions distinctes – à la différence du point-virgule, qui se produit à la fin d'une (non -) bloc de déclaration – des points-virgules mettre fin à des déclarations.
L'opérateur virgule a la priorité la plus basse de tout C de l'opérateur, et agit comme un point de séquence. Dans une combinaison de virgules et des points-virgules, des points-virgules ont priorité plus basse que la virgule, point-virgules séparent états mais des virgules se produisent à l'intérieur des états, ce qui s'accorde avec leur utilisation en tant que simples signes de ponctuation: a, b, c, d est regroupé en tant que (a, b); (c, d) parce que ces deux états distincts.
J'espère que cela répond à votre question.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.