52 Stimmen

Was bringt ein Auftrag?

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.

64voto

Oliver Charlesworth Punkte 259497

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).

24voto

foxx1337 Punkte 1631

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

4voto

Ahmed Salah Punkte 791

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

3voto

Sandro Munda Punkte 38320
  1. Weisen Sie i den Wert 2 zu
  2. Die Variable i auswerten und anzeigen

2voto

pmg Punkte 102904

In C sind (fast) alle Ausdrücke haben 2 Dinge
1) einen Wert
2) eine Nebenwirkung

Der Wert des Ausdrucks

2

ist 2 ; seine Nebenwirkung ist "keine";

Der Wert des Ausdrucks

i = 2

ist 2 dessen Nebeneffekt darin besteht, "den Wert in dem Objekt namens i bis 2";

CodeJaeger.com

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.

Powered by:

X