4

我在 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 尝试过它,它总是返回第二个参数的值!谁能解释一下这个表达?

4

2 回答 2

9

看起来坏了。这是对逗号运算符的使用,它只计算最终表达式的值,即1.

因此,由于该代码等效于:

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

随后的测试res似乎毫无意义,从而断了。

于 2012-08-31T10:46:13.847 回答
1

你看到的逗号是一个不太常用的 C 运算符。

基本上,它所做的是执行 2 条语句(ss->elem = *i; 和 1;)。声明1;并没有真正做太多。

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

于 2012-08-31T10:47:34.783 回答