7

可能的重复:
','运算符在 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&R 中没有发现任何这样的东西,任何人都可以推荐一本好书。我已经编写了一些东西,对 C 并不陌生,但在这个问题失败后,我想再次深入了解更多 C 概念(特别是上面提到的)我可以在哪里阅读。

4

7 回答 7

4

看看逗号运算符

如您所见, 的评估e1, e2, e3是 e3,如 ANSI C 标准中所指定

因此,您的 if 条件评估'0'为 0 字符,其 VALUE 与 0 不同,因此,条件为真,并打印“哇”

于 2011-06-18T15:47:09.650 回答
4

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

于 2011-06-18T15:48:29.643 回答
2

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

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

于 2011-06-18T15:47:36.220 回答
1

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

于 2011-06-18T15:47:34.633 回答
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

于 2011-06-18T19:15:36.777 回答
0

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

在您的情况下,以下两个语句都是等效的。

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

if (c) {
 printf("wow \n");
}

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

于 2011-06-18T15:51:54.453 回答
0

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

于 2011-06-18T16:17:20.077 回答