Nel codice seguente:Qual è il risultato di un'espressione di assegnazione in C?
int c;
while((c=10)>0)
Cosa c = 10
restituiscono? È 1 che indica che il valore 10 è assegnato alla variabile c con successo o è 10? Perché?
Nel codice seguente:Qual è il risultato di un'espressione di assegnazione in C?
int c;
while((c=10)>0)
Cosa c = 10
restituiscono? È 1 che indica che il valore 10 è assegnato alla variabile c con successo o è 10? Perché?
c = 10 è un'espressione che restituisce 10 che assegna anche 10 a c.
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.
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.
Perché c sarà assegnato un valore spazzatura? –
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 –
'c = 10' non assegnerà il valore' 10' a 'c'? –
while((c=10)>0)
c = 10
should restituisce 10
.
Ora, per while(10>0)
10>0
, l'operatore >
restituisce 1
(valore diverso da zero).
è 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.
se assegna 10 a C, ma dovrebbe c = 10 ritorno 1? – user2131316
Non sarebbe bello, pensa all'istruzione a = c = 10; Non vorresti che fosse un 10, non un 1? – Bathsheba
@ 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. –