Den Inkrementoperator in C verstehen

7

Warum ist das Folgende illegal in C?

%Vor%

Nach meinem Buch ist das illegal, aber ich verstehe nicht warum.

    
Dstubred Lopez 09.10.2013, 14:36
quelle

7 Antworten

21

In i++ wird der Wert von i geändert. Nach der Ausführung ist i der Wert eins plus der vorherige Wert. Sie können jedoch keinen Wert in w+x speichern. Daher können Sie keine der folgenden Aktionen ausführen, die alle (wenn sie funktionieren) mehr oder weniger den gleichen Effekt haben würden:

%Vor%

Etwas, das auf der linken Seite einer Zuweisung platziert werden kann, wird normalerweise als lvalue bezeichnet ( l ist für links ). Die prägnante Art zu sagen ist, dass ++ nur auf lvalues ​​angewendet werden kann und w+x kein lvalue ist. Sie können mehr über lvalues ​​(und andere Arten von Werten) in dieser Frage und ihren Antworten lesen:

Joshua Taylor 09.10.2013, 14:39
quelle
8

Laut Dennis M. Ritchies Buch: "Die C-Programmiersprache" :

  

2.8 Operatoren zum Erhöhen und Verringern

     

(Seite 44)

     

Die Inkrement- und Dekrementoperatoren können nur auf Variablen angewendet werden; Ein Ausdruck wie (i + j)++ ist illegal. Der Operand muss ein modifiable lvalue des Arithmetik- oder Zeigertyps sein.

Weil ein Ausdruck

%Vor%

entspricht:

%Vor%

Also ein Ausdruck wie:

%Vor%

Ähnliches wie:

%Vor%

Das sieht weniger bedeutungsvoll aus, wir können den Ausdruck nicht ändern.

Related: Ein interessanter Fehler, den man in gcc 4.4.5 vielleicht wissen möchte, ist der Ausdruck j = ++(i | i); kompiliert, der einen l-Wert Fehler erzeugen sollte. Lesen Sie: j = ++(i | i); und j = ++(i & i); sollte ein Fehler sein: lvalue?

Lesen Sie über modifizierbaren lvalue von (1) Expression muss ein modifizierbarer Lvalue-Fehler sein und (2) msdn docs: L-Werte und R-Werte

    
Grijesh Chauhan 09.10.2013 14:43
quelle
5

y = x++ gibt den Wert des Inkrements für die Variable x zurück.

y = (x + z)++ schlägt fehl, weil (x + z) KEINE Variable ist.

    
opalenzuela 09.10.2013 14:40
quelle
4

Es ist illegal, weil (w+x) kein gültiger linker Wert ist.

Ein Wert auf der linken Seite ist ein Wert, der (I. E. einer Variablen) zugewiesen werden kann.

    
Pablo Santa Cruz 09.10.2013 14:38
quelle
3

Post-Inkrement erfordert ein l-Wert , was w+x nicht ist.

    
NPE 09.10.2013 14:39
quelle
2

Dies ist illegal, weil (x+y) keine Variable ist.

Betrachten Sie

a++ ist a = a + 1

(x+y)++ ist was? %Code%?

    
Tun Zarni Kyaw 09.10.2013 14:43
quelle
2

Post increment und decrement erfordert l-value (sagen wir eine Variable, die auf der linken Seite kommt). w+x ist keine Variable. Das Inkrementieren von w+x ist wie incrementig 3 + 4 , was illegal ist.

    
haccks 09.10.2013 14:43
quelle

Tags und Links