W poniższym kodzie:Jaki jest wynik wyrażenia przypisania w C?
int c;
while((c=10)>0)
Co c = 10
ocenia się? Czy to 1 wskazuje, że wartość 10 jest przypisana do zmiennej c z powodzeniem, czy jest to 10? Czemu?
W poniższym kodzie:Jaki jest wynik wyrażenia przypisania w C?
int c;
while((c=10)>0)
Co c = 10
ocenia się? Czy to 1 wskazuje, że wartość 10 jest przypisana do zmiennej c z powodzeniem, czy jest to 10? Czemu?
c = 10 to wyrażenie zwracające 10, które również przypisuje 10 do c.
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.
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.
Dlaczego c ma być przypisana wartość śmieci? –
ponieważ nie jest jeszcze zainicjalizowany, a kompilator automatycznie przypisuje do niego jakąś wartość. Ponieważ wszystkie adresy w pamięci mają pewną wartość przed zainicjowaniem, –
'c = 10' czy nie przydzieli wartości' 10' do 'c'? –
while((c=10)>0)
c = 10
should return 10
.
Teraz, dla while(10>0)
10>0
, operator >
zwraca 1
(wartość niezerowa).
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.
jeśli przypisuje do 10 ° C, lecz nie powinien C = 10 powrót 1? – user2131316
To nie byłoby miłe, pomyśl o stwierdzeniu a = c = 10; Czy nie chciałbyś mieć 10, a nie 1? – Bathsheba
@ 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. –