2013-05-15 15 views

Odpowiedz

9

c = 10 to wyrażenie zwracające 10, które również przypisuje 10 do c.

+0

jeśli przypisuje do 10 ° C, lecz nie powinien C = 10 powrót 1? – user2131316

+1

To nie byłoby miłe, pomyśl o stwierdzeniu a = c = 10; Czy nie chciałbyś mieć 10, a nie 1? – Bathsheba

+1

@ user2131316: wyrażenie * expression * c = 10' ma wartość 'c' po przypisaniu ([N1570] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/ n1570.pdf), 6.5.15/3). Wyrażenia przypisania nie są wyrażeniami logicznymi. –

1

Przypisanie powraca z przypisaną wartością. W przypadku, gdy c=10 ma wartość 10. Ponieważ 10! = 0, w c oznacza to również true, więc jest to nieskończona pętla.

To tak jak byś napisać

while(10) 

Plus Po dokonaniu przydziału.

Jeśli zastosujemy tę logikę, można zobaczyć, że

while(c=0) 

byłaby pętla, która nigdy nie wykonuje swoje oświadczenie lub bloku.

1

To jest nieskończona pętla. Najpierw przypisz 10 do c, a następnie porównaj ją z c> 0, następnie uruchom ponownie pętlę, przypisz od 10 do c, porównaj ją z c> 0 i tak dalej. Pętla nigdy się nie kończy. Jest to równoznaczne z następujących czynności:

while(c=10); 

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

Edit: Nie będzie powrotu 10, ponieważ powrót kompilator tylko prawdziwa lub fałszywa wartość, więc to return true lub 1 zamiast 10.

+0

Dlaczego c ma być przypisana wartość śmieci? –

+0

ponieważ nie jest jeszcze zainicjalizowany, a kompilator automatycznie przypisuje do niego jakąś wartość. Ponieważ wszystkie adresy w pamięci mają pewną wartość przed zainicjowaniem, –

+0

'c = 10' czy nie przydzieli wartości' 10' do 'c'? –

1
while((c=10)>0) 

c = 10should return 10.

Teraz, dla while(10>0)10>0, operator > zwraca 1 (wartość niezerowa).

0

Mówi się w 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.