2017-12-05 1 views
-1

Was ist der Unterschied zwischen dem Zuweisungsoperator und dem Gleichheitsoperator in C

int main(){ 

    int x = 5580, y = 55098; 

    printf("%d\n", y = x); 

    return 0; 

} 
Warum gibt das den Wert von y aus? Ich dachte, dass der Wert von x y zugewiesen wurde, aber das ist nicht der Fall.

+1

Ich sehe keine enge Beziehung zwischen dem Titel und der Frage im Körper. Der "gleiche Operator" (vorausgesetzt, Sie meinen "==") tritt nicht auf. – Yunnosch

+4

Es sollte den Wert von "x", d. H. "5580", drucken, und das tut es tatsächlich. –

+2

Versucht, Ausgabe: 5580. Meintest du "Wert von y, nachdem ihm der Wert von x zugewiesen wurde"? – Yunnosch

Antwort

0

Das ist erwartet Verhalten in C und anderen Sprachen. Ihr Titel der Frage ist auch nicht sehr gut formuliert. Der Zuweisungsoperator "ist" der Gleichheitsoperator, und genau das verwenden Sie. Sie werden möglicherweise durch die Reihenfolge der Vorgänge in C verwirrt. In Ihrer Zeile printf passiert zuerst der Ausdruck y = x, und der resultierende Wert (y) wird als Parameter in Ihrer printf-Funktion verwendet, weshalb Sie den Wert y sehen gedruckt. Dies ist eine der Grundlagen von C. Ich würde empfehlen, die C-Syntax zu lesen.

1

Gemäß der standard ein Zuweisungsausdruck auswertet zum valueOf der linke Operand nach Zuweisung:

6.5.16 Zuweisungsoperatoren

(3) einen Zuweisungsoperator speichert einen Wert, in dem mit bezeichneten Objekt der linke Operand. Ein Zuweisungsausdruck den Wert des linken Operanden nach der Zuweisung

So y=x in printf("%d\n", y = x)y ersten Aufnahme auf dem Wert von x kann, und wertet dann den (neu zugeordnet) -Wert von y. Somit wird die Ausgabe der printf-Anweisung 5580, d. H. Der Wert x, der der neue Wert y ist.

+0

Diese Frage ist eine gute Gelegenheit zu lehren, dass in C der Wert von Ausdrücken der "Haupt" -Effekt ist und dass einige Ausdrücke Nebenwirkungen haben. In 'y = x' ist die Einstellung von 'y' auf den Wert von 'x' tatsächlich der Nebeneffekt, obwohl es natürlich die vorherrschende Verwendung ist. Obwohl dies wie ein technischer Punkt erscheint, vermittelt es den Lernenden, wie man über C nachdenkt - und somit über andere Ausdrücke mit Nebenwirkungen nachzudenken und dann über die Regeln über Nebenwirkungen und Sequenzpunkte nachzudenken, und so weiter. –

Verwandte Themen