5

以下代码的输出将是什么
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);

输出是:11 3.我想知道怎么做?+ 在一个手段之后是什么符号?

4

5 回答 5

19

我认为 DrYap 是对的。

x = + + a + + + a + + + 5; 

是相同的:

x = + (+ a) + (+ (+ a)) + (+ (+ 5));

这里的关键点是:

1) c, c++ 没有 + 作为后缀运算符,所以我们知道我们必须将其解释为前缀

2)一元+比二元+绑定更紧密(优先级更高)

好笑不是吗?如果这些是 - 迹象,它看起来不会那么奇怪。Monadic +/- 只是一个前导符号,或者换句话说,“+x”与“0+x”相同。

于 2012-04-28T07:48:49.880 回答
13

a 之后的 + 被视为下一个值之前的 +。如果您使用一致的间距,则它与以下内容相同:

x = + + a + + + a + + + 5;

但并非所有的 +s 都是必需的,因此它的作用与执行以下操作相同:

x = a + a + 5;

a 的值没有改变,因为您从未使用过递增运算符,即 ++,两个 + 符号之间没有空格。+ 和 ++ 是两个独立的运算符。

于 2012-04-28T07:41:11.303 回答
3

该代码似乎等同于:

x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));

x = a + a + 5。哪个是 11。你知道你可以在数字前加上 + 或 - 号,对吧?现在那些+仅仅表示变量的符号。由于符号为+,变量保持不变即“+5”表示“5”,因此“+a”表示“a”,“+ +a”表示“+(+a)”表示“a”。以同样的方式你可以写x = + + + 3 + + + + 3 + + + + 5. 或x = - + + - 3 + - + - 3 - - + 5;

于 2012-04-28T07:54:05.780 回答
3

由于+运算符从不是两个相邻的,而是始终由空格分隔,因此该语句 x=+ +a+ + +a+ + +5;实际上读作

x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;

所以基本上最终的方程变成了这种类型 x=a+a+5;,从而得到了结果。

于 2012-04-28T07:54:40.890 回答
0

x=+ +a+ + +a+ + +5 :这相当于

x = x=+ +a+ + +a+ + +5 或者我们可以把它写成 x = + (+ a) + (+ (+ a)) + (+ (+ 5)) 并且+只是表示最终将被评估为 x = a + a + 5 的符号。

于 2012-04-28T08:53:49.117 回答