相关疑难解决方法(0)

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

后增量运算符行为

可能重复:
C,C++,Java和C#中的前后增量运算符行为

这是一个测试用例:


void foo(int i, int j)
{
   printf("%d %d", i, j);
}
...
test = 0;
foo(test++, test);
Run Code Online (Sandbox Code Playgroud)

我希望得到一个"0 1"输出,但我得到"0 0"什么给了??

c c++ compiler-construction post-increment

16
推荐指数
4
解决办法
2145
查看次数

C++中递增和递减opreator的优先级

我在我的gcc上尝试过这个:

int a=1;
cout<<(--a)--;
Run Code Online (Sandbox Code Playgroud)

输出为0; 但改成它

cout<<--(a--);
Run Code Online (Sandbox Code Playgroud)

导致错误(减值操作数需要左值).有人可以告诉我这件事吗?

谢谢!

c++ increment decrement

7
推荐指数
2
解决办法
981
查看次数

++ i和i ++之间的区别

可能的重复:
i ++或++ i的效率更高?
我们如何解释表达式的结果(++ x)+(++ x)+(++ x)?
循环中i ++和++ i之间的区别?

我正在尝试这两个程序:

void fun(){
     int k = 0;
     int i= 10;
     k = (i++)+(++i);
     cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出= 22,因为i ++将给出10而++我将评估为12.

void fun(){
     int k = 0;
     int i = 10;
     k = (++i)+(++i);
     cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出= 24

它应该是23我猜,还是有些东西我无法看到?

c++

5
推荐指数
2
解决办法
1499
查看次数

++ i + ++ i + ++ i in Java vs C.

int i=2;
i = ++i + ++i + ++i;
Run Code Online (Sandbox Code Playgroud)

哪个更正确?Java的结果是12或C = 13.或者如果不是正确的问题,请详细说明.

c java operator-precedence undefined-behavior

5
推荐指数
4
解决办法
8540
查看次数

表达式x [ - i] = y [++ i] = z [i ++],首先进行评估?

当l值的评估先于 r 值的评估并且赋值也返回一个值时,首先评估以下哪个值?

int i = 2;
int x[] = {1, 2, 3};
int y[] = {4, 5, 6};
int z[] = {7, 8, 9};

x[--i] = y[++i] = z[i++]; // Out of bound exception or not?
Run Code Online (Sandbox Code Playgroud)

注意:具有l值评估的通用C语言首先出现.从我的教科书:

在一些语言中,例如C,赋值被认为是运算符,其除了产生副作用之外还评估如此计算的r值.因此,如果我们用C写:

x = 2;
Run Code Online (Sandbox Code Playgroud)

除了将值2分配给x之外,对这样一个命令的评估返回值2.因此,在C中,我们还可以写:

y = x = 2;
Run Code Online (Sandbox Code Playgroud)

应解释为:

(y = (x = 2));
Run Code Online (Sandbox Code Playgroud)

c variable-assignment operator-precedence undefined-behavior

1
推荐指数
1
解决办法
1627
查看次数

-5
推荐指数
1
解决办法
112
查看次数