2013-05-15 26 views

Trả lời

9

c = 10 là biểu thức trả về 10 cũng chỉ định 10 đến c.

+0

nếu nó gán 10 đến c, nhưng nên c = 10 trở lại 1? – user2131316

+1

Điều đó sẽ không được tốt đẹp, suy nghĩ về tuyên bố a = c = 10; Bạn sẽ không muốn một được 10, không 1? – Bathsheba

+1

@ user2131316: biểu thức * 'c = 10' có giá trị' c' sau khi gán ([N1570] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/ n1570.pdf), 6.5.15/3). Biểu thức gán không phải là biểu thức Boolean. –

1

Trả về chuyển nhượng có giá trị được chỉ định. Trong trường hợp c=10 là 10. Kể từ 10! = 0, trong c nó cũng có nghĩa là đúng vì vậy đây là một vòng lặp vô hạn.

Nó cũng giống như bạn sẽ viết

while(10) 

Thêm Bạn đã thực hiện việc chuyển nhượng.

Nếu bạn làm theo logic này, Bạn có thể thấy, đó

while(c=0) 

sẽ là một vòng lặp mà không bao giờ thực hiện tuyên bố hoặc khối của nó.

1

Đây là vòng lặp vô hạn. Nó đầu tiên gán 10 đến c, sau đó so sánh nó với c> 0, sau đó lặp lại bắt đầu, gán 10 đến c, so sánh nó với c> 0 và cứ thế. Vòng lặp không bao giờ kết thúc. Đây là tương đương như sau:

while(c=10); 

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

Edit: Nó sẽ không trở lại 10 vì trình biên dịch lại chỉ có giá trị đúng hay sai, vì vậy nó trở thành sự thật hay 1 thay vì 10.

+0

Tại sao c sẽ được gán giá trị rác? –

+0

vì nó chưa được khởi tạo và trình biên dịch tự động gán một số giá trị cho điều này. Vì tất cả các địa chỉ trong bộ nhớ có một số giá trị trước khi nó được khởi tạo –

+0

'c = 10', nó sẽ không gán giá trị' 10' cho 'c'? –

1
while((c=10)>0) 

c = 10should trả lại 10.

Hiện tại, đối với while(10>0)10>0, toán tử > trả về 1 (giá trị khác 0).

0

Người ta nói trong 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.