逗号运算符-为C中的棘手问题推荐一本书,例如不寻常的if条件



可能重复:
什么是'';运算符在C中做什么?

好的,我今天接受了一次采访,他们问我以下代码的输出应该是什么

#include<stdio.h>
int main ()
{
int a=1,b=1;
char c='0';
if(a,b,c)
   printf("wow n");
}

在我的机器上运行后,我可以得到答案,但我无法在那里回答。我想知道这样的if语句是否被允许?它在哪里被提及?

我的问题是上面提到的if条件,我不明白if语句是如何工作的。

**更新**
我在K&任何人都可以推荐一本好书。我已经编程了一些东西,对C来说并不是什么新鲜事,但在这个问题失败后,我想再次看看是否有更多深入的C概念(特别是上面提到的),我可以在哪里阅读。

逗号表达式a,b,c只取最后一个值c的值,该值具有字符值'0',该值的数值为48。因此表达式的计算结果为true。

看看逗号运算符。

正如您所看到的,e1, e2, e3的评估是e3,正如ANSI C标准中所规定的那样

因此,如果条件在'0'中求值,则wich是0 charcated,wich有一个不同于0的VALUE,因此,条件为true,并打印"wow"

维基百科关于逗号运算符的条目非常好,它简洁地解释了它的工作原理。

表达式a, b, c的结果是c,其在这种情况下等于'0',其计算为true

逗号表达式。它的结果是最正确的论点,在你的情况下——c。值得注意的是,逗号表达式保证了一个序列点,即参数是从左到右计算的,这与许多其他运算符

不同

逗号运算符是一个C++运算符,其作用是计算所有表达式,并丢弃除最后一个表达式之外的所有表达式的结果。

在您的情况下,以下两种陈述是等效的。

if (a,b,c) {
 printf("wow n");
}
if (c) {
 printf("wow n");
}

在这两种情况下,IF语句中的代码都将基于c的值执行。

逗号表达式的结果是最后一个表达式的值。这是"0",它不是零。

它现在越来越老了,作者大量引用了Solaris环境和编译器,但您可以看看Peter Van Der Linden的"Expert C Programming:Deep C Secrets"。这本书至少有90%仍然很有用。甚至还有一个关于面试问题的附录。我记不清逗号运算符是否包含在内,但许多其他内容都包含在内。

另外两个(免费)资源:http://c-faq.com/

http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

相关内容

  • 没有找到相关文章

最新更新