Warum ist ein Ausdruck i = 2
Rückkehr 2? Auf welche Regel stützt sich dies?
printf("%d\n", i = 2 ); /* prints 2 */
Ich bin im C-Bereich, nachdem ich lange Zeit in Java/C# verbracht habe. Verzeihen Sie meine Unwissenheit.
Warum ist ein Ausdruck i = 2
Rückkehr 2? Auf welche Regel stützt sich dies?
printf("%d\n", i = 2 ); /* prints 2 */
Ich bin im C-Bereich, nachdem ich lange Zeit in Java/C# verbracht habe. Verzeihen Sie meine Unwissenheit.
Es wertet aus. a 2
denn so ist es in der Norm definiert. Von C11 Standard , Abschnitt 6.5.16:
Ein Zuweisungsausdruck hat den Wert des linken Operanden nach der Zuweisung
Es geht darum, Dinge wie diese zu ermöglichen:
a = b = c;
(obwohl es eine Debatte darüber gibt, ob ein solcher Code eine gute Sache ist oder nicht).
Übrigens ist dieses Verhalten auch in Java zu beobachten (und ich würde wetten, dass es auch in C# so ist).
Die Regel ist, dass der rechte Operand von =
in den Typ der Variablen umgewandelt, der sie zugewiesen ist.
int a;
float b;
a = b = 4.5; // 4.5 is a double, it gets converted to float and stored into b
// this returns a float which is converted to an int and stored in a
// the whole expression returns an int
Er berücksichtigt zuerst den Ausdruck und druckt dann die ganz links stehende Variable.
Beispiel:
int x,y=10,z=5;
printf("%d\n", x=y+z ); // firstly it calculates value of (y+z) secondly puts it in x thirdly prints x
Anmerkung:
x++
ist Postfix und ++x
ist so vorangestellt:
int x=4 , y=8 ;
printf("%d\n", x++ ); // prints 4
printf("%d\n", x ); // prints 5
printf("%d\n", ++y ); // prints 9
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.