2016-08-19 59 views
-1

在此代碼爲什麼其他塊如果塊被分配給末尾的num1,num2和0,那麼塊被執行?

#include <stdio.h> 
int main(){ 
    int i; 

    if(i= 50,40) 
     printf(" if blk i %d\n",i); 
    else 
     printf(" else part"); 



    return 0; 
} 

輸出當屬

如果BLK我50

但是當一個零添加到分配部分的if語句,它進入其他部分。爲什麼這個0使它轉到其他部分?

下面的代碼:

#include <stdio.h> 
int main(){ 
    int i; 

    if(i= 50,40,0) 
     printf(" if blk i %d\n",i); 
    else 
     printf(" else blk i %d\n", i); 

    printf("i %d\n", i); 

    return 0; 
} 
+6

你認爲世界上有什麼「我= 50,40」呢?搜索關於逗號運算符和賦值運算符。另外C和C++是不同的語言!不要添加錯誤的標籤! – Olaf

+0

@olaf非常感謝逗號運算符,但除此之外,對於這個小代碼片段,c和C++都是一樣的,我只是檢查過它。對不起,不好的帖子反正 –

+1

如果你超載其中一個操作員,則不應該。相同的語法和語法並不意味着相同的語義!只要選擇你使用的語言。 – Olaf

回答

4

此語句:

if(i= 50,40) 

實際上是一個:

if(40) 

逗號操作者使第一i被分配到50(逗號操作具有比分配的優先級低),然後作爲一個條件的使用的最後一個元素是40

但是,當零被添加到第e語句中的賦值部分,它轉到else部分。

因此,作爲使用最後一個元素的條件是00導致if失敗,並執行else塊。

3

你讓使用逗號操作的。使用此運算符的表達式的值是右側的值。

在這種情況下:

(i= 50,40) 

i是第一組50,則值40被評估,所以表達式的值爲40。由於這是一個非零值,則評估爲真在布爾上下文中輸入if部分。

在這種情況下:

(i= 50,40,0) 

與上面相同會發生,但隨後0被評估,所以表達式的值爲0的零評估爲假的布爾上下文所以它進入else一部分。

1

表達式a, b首先評估a並丟棄結果。
然後它評估b,並且該值是表達式的結果。

i= 50,40首先評估i = 50,然後產生40作爲其結果。
既然40不是0,它將轉換爲true作爲條件。

i = 50, 40, 0評估i = 50,然後40,然後0,它成爲表達式的值。
0轉換爲false

i = (50,40)另一方面將分配40i並完全忽略50

相關問題