2013-05-15 11 views

risposta

9

c = 10 è un'espressione che restituisce 10 che assegna anche 10 a c.

+0

se assegna 10 a C, ma dovrebbe c = 10 ritorno 1? – user2131316

+1

Non sarebbe bello, pensa all'istruzione a = c = 10; Non vorresti che fosse un 10, non un 1? – Bathsheba

+1

@ user2131316: l'espressione * * c = 10' ha il valore di 'c' dopo l'assegnazione ([N1570] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/ n1570.pdf), 6.5.15/3). Le espressioni di assegnazione non sono espressioni booleane. –

1

I ritorni di assegnazione con il valore assegnato. Nel caso c=10 è 10. Poiché 10! = 0, in c significa anche vero, quindi questo è un ciclo infinito.

è come si può scrivere

while(10) 

Inoltre hai fatto l'assegnazione.

se si segue questa logica, si può vedere, che

while(c=0) 

sarebbe un ciclo che non esegue la sua dichiarazione o il blocco.

1

Questo è un ciclo infinito. Assegna prima 10 a c, quindi confrontalo con c> 0, quindi di nuovo il ciclo inizia, assegna 10 a c, lo confronta con c> 0 e così via. Il ciclo non finisce mai. Questo è equivalente alla seguente:

while(c=10); 

/* Because c assign a garbage value, but not true for all cases maybe it assign 0 */ 
while(c); 

Edit: Esso non ritorno 10 perché ritorno compilatore unico valore vero o falso, così ritorno vero o 1 anziché 10.

+0

Perché c sarà assegnato un valore spazzatura? –

+0

perché non è ancora inizializzato e il compilatore assegna automaticamente un valore a questo. Poiché tutti gli indirizzi in memoria hanno qualche valore prima dell'inizializzazione –

+0

'c = 10' non assegnerà il valore' 10' a 'c'? –

1
while((c=10)>0) 

c = 10should restituisce 10.

Ora, per while(10>0)10>0, l'operatore > restituisce 1 (valore diverso da zero).

0

è detto nel C99 6.5.16

An assignment operator stores a value in the object designated by the left operand. An   
assignment expression has the value of the left operand after the assignment, but is not an 
lvalue.