C中的布尔表达式

时间:2012-08-31 10:43:55

标签: c boolean boolean-operations

我在C程序中发现了这个表达式而我没有得到它:

 struct stack_rec *ss;                                          
 ss=(struct stack_rec *)EMalloc(sizeof(struct stack_rec));       
 if (ss) {                                                      
   int res;                                                     
   res = (ss->elem  = * i , 1); // what does this mean ????
   if (res <= 0)                                                
     return res;                                                
   if (*s == 0) {                                               
     ss->next = 0;                                              
   } else {                                                     
     ss->next = *s;                                             
   }                                                            
   *s = ss;                                                     
   return 2;                                                    
 }                                                              
 return 0;                                                      

res = (ss->elem = * i , 1);是什么意思?它是一个布尔表达式吗?我用0而不是1来尝试它,它总是返回第二个参数的值!请问有人解释这个表达吗?

2 个答案:

答案 0 :(得分:9)

看起来很破碎。它是逗号运算符的一种用法,它只是评估最终表达式的值,即1

因此,该代码相当于:

ss->elem = *i;
res = 1;

随后对res的测试似乎毫无意义,因而破裂。

答案 1 :(得分:1)

逗号看到的是一个使用不多的C运算符。

基本上,它的作用是执行2个语句(ss-&gt; elem = * i;和1;)。声明1;不太重要。

之后它返回最后一个语句的结果(在本例中为1)