如何解决i = (i, ++i, 1) + 1 是什么?做??
在表达式(i, ++i, 1)
中,使用的逗号是逗号运算符
逗号运算符(由 token 表示
,
)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)。
因为它丢弃了它的第一个操作数,所以它通常
。如果第一个操作数的副作用没有发生,那么编译器可能会生成有关表达式无效的警告。
因此,在上面的表达式中,最左边的i
将被评估,其值将被丢弃。然后++i
将被评估并增加i
1 并且表达式的值++i
将再次被丢弃,
_但副作用i
是永久_的。然后1
将被评估并且表达式的值将是1
。
它相当于
i; // Evaluate i and discard its value. This has no effect.
++i; // Evaluate i and increment it by 1 and discard the value of expression ++i
i = 1 + 1;
请注意,
,因为在逗号运算符的左右操作数的计算之间存在一个序列点。
解决方法
,我编写了一个小程序:
#include <stdio.h>
int main(void) {
int i = 5;
i = (i,++i,1) + 1;
printf("%d\n",i);
return 0;
}
输出是2
。天哪,我没有看到递减的到来!这里发生了什么?
此外,在编译上述代码时,我收到一条警告:
px.c:5:8: 警告:逗号表达式的左操作数无效
[-Wunused-value] i = (i,1) + 1; ^
为什么?但可能我的第一个问题的答案会自动回答它。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。