了解前后递增,中间用逗号

时间:2018-12-25 11:44:03

标签: c

考虑以下程序

libraryDependencies += "org.apache.kafka" %% "kafka-streams-scala" % kafkaVer

我不知道为什么输出为-6。

#include <stdio.h> void main(){ int p = -8; int i = (p++, ++p); printf("%d\n", i); } 将在执行赋值语句后增加,p++将在将-8变为-7之前增加。

++p如何分配为-6?

3 个答案:

答案 0 :(得分:6)

因为对于逗号运算符A,B,然后先完成A,然后再进行B,然后p++递增p,并且++p增加pOperator precedence

或者这样想

int i = (p++, ++p);

p++;
int i = ++p;

答案 1 :(得分:4)

表达式(p++, ++p)有一个comma operator。逗号运算符从左到右评估其操作数,并产生最右边操作数的结果。因此,i获得值-6(在p++++p操作之后)。

答案 2 :(得分:2)

正如ptr_user7813604所说,您正在使用逗号运算符,它是c中的二进制运算符。 它计算它的第一个操作数(在您的情况下p ++递增p),然后丢弃结果(表示p已递增但未分配给任何变量),然后它计算第二个操作数(在您的情况下++ p递增p)并返回此值值和类型。因为第二个操作数是++ p,所以您将在它递增之后收到该值,如果第二个操作数是另一个p ++,那么您将在它递增之前将值分配给i。

有关逗号运算符的其他信息,您可以查询https://en.wikipedia.org/wiki/Comma_operator