标签: post-increment

为什么我不能用C-like语言做++ i ++?

半开玩笑地半开玩笑:为什么我不能++i++用C语言,特别是在C#中?

我希望它增加值,在我的表达式中使用它,然后再次递增.

c c# pre-increment post-increment

27
推荐指数
5
解决办法
5167
查看次数

C#中的奇怪增量行为

注意:请注意,下面的代码基本上没有意义,仅用于说明目的.

基于这样一个事实,即在将赋值分配给左侧变量之前必须始终对赋值的右侧进行求值,并且在评估之后始终执行诸如++--之后的递增操作,我不会期望以下代码工作:

string[] newArray1 = new[] {"1", "2", "3", "4"};
string[] newArray2 = new string[4];

int IndTmp = 0;

foreach (string TmpString in newArray1)
{
    newArray2[IndTmp] = newArray1[IndTmp++];
}
Run Code Online (Sandbox Code Playgroud)

相反,我希望newArray1[0]被分配到newArray2[1],newArray1[1]newArray[2]等多达扔的地步System.IndexOutOfBoundsException.相反,令我惊讶的是,抛出异常的版本是

string[] newArray1 = new[] {"1", "2", "3", "4"};
string[] newArray2 = new string[4];

int IndTmp = 0;

foreach (string TmpString in newArray1)
{
    newArray2[IndTmp++] = newArray1[IndTmp];
}
Run Code Online (Sandbox Code Playgroud)

因为,在我的理解中,编译器首先评估RHS,将其分配给LHS,然后才增加这对我来说是一个意外的行为.或者它真的是预期的,我显然错过了什么?

c# post-increment

24
推荐指数
4
解决办法
1118
查看次数

是返回x ++的行为; 界定?

如果我有一个带有实例方法和变量的类

class Foo
{

   ...

   int x;
   int bar() { return x++; }
 };
Run Code Online (Sandbox Code Playgroud)

是否定义了返回后递增变量的行为?

c++ return post-increment

21
推荐指数
4
解决办法
1万
查看次数

后增量运算符不在for循环中递增

我正在做一些关于Java的研究,发现这很令人困惑:

for (int i = 0; i < 10; i = i++) {
  System.err.print("hoo... ");
}
Run Code Online (Sandbox Code Playgroud)

这是永无止境的循环!

任何人都有很好的解释为何会发生这样的事情

java loops for-loop infinite-loop post-increment

21
推荐指数
2
解决办法
2066
查看次数

数组中的预增量与后增量

我正在学习编程,我从C语言开始.我正在读我们的C书.我正在那本书中学习这个课程.

main( ) 
{ 
 int a[5] = { 5, 1, 15, 20, 25 } ; 
 int i, j, k = 1, m ; 
 i = ++a[1] ; 
 j = a[1]++ ; 
 m = a[i++] ; 
 printf ( "\n%d %d %d", i, j, m ) ; 
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,它将打印i as 2,j as 1m as 15

但不知何故,它打印为 i as 3,j as 2m as 15?为什么会这样?

以下是我的理解 -

b = x++;
In this example suppose …
Run Code Online (Sandbox Code Playgroud)

c pre-increment post-increment

21
推荐指数
2
解决办法
3万
查看次数

增量逻辑

我正试图深入了解post和pre incrementors,但是我对以下表达式有点困惑:

public static void main(String[] args) {
    int i = 0;
    i = i+=(++i + (i+=2 + --i) - ++i);
    // i = 0 + (++i + (i+=2 + --i) - ++i);
    // i = 0 + (1 + (3 + 2) - 1);
    // i = 0 + (6 - 1);
    System.out.println(i); // Prints 0 instead of 5
}
Run Code Online (Sandbox Code Playgroud)

我知道我在哪里错过了逻辑,但在哪里?

我尝试过的:

  • 从左到右(虽然我知道不推荐)
  • 从内部支架开始,从那里开始.

谢谢您的帮助

PS:评论是我的微积分的细节

编辑1

我试图将de hard编码值从表达式2改为其他东西,结果总是给出0

看看这个例子:

    int i = 0;
    i = …
Run Code Online (Sandbox Code Playgroud)

java logic pre-increment post-increment

21
推荐指数
2
解决办法
1285
查看次数

循环中的预增量和后增量之间有什么区别(for/while)?

我的兴趣在于forwhile循环之间的区别.我知道使用后增量值然后递增,操作返回一个恒定的预增量.

while (true) {
    //...
    i++;
    int j = i;
}
Run Code Online (Sandbox Code Playgroud)

在这里,将j包含循环结束时的旧i或后递增i

c++ increment post-increment

18
推荐指数
5
解决办法
8万
查看次数

后增量运算符行为

可能重复:
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
查看次数

++ x比Java中的x ++更有效吗?

在编程类,教授教我们关于x++++x,其中x是一个整数.

他说,在方案中,我们可以只是把两种x++++x,++x是更有效的(一点,但还是在理论上,更高效尽管如此).

但我忘记了原因.有谁知道?这是Java.

java pre-increment post-increment

16
推荐指数
2
解决办法
1664
查看次数

*p ++ + = 2定义得很好吗?

我不确定下面的陈述是否由标准C明确定义

*p1++ += 2;
Run Code Online (Sandbox Code Playgroud)

或其他类似声明:

*E1++ <operator>= E2
Run Code Online (Sandbox Code Playgroud)

从标准C关于后增量:

postfix ++运算符的结果是操作数的值.获得结果后,操作数的值递增.(即,将相应类型的值1添加到其中.)有关约束,类型和转换以及操作对指针的影响的信息,请参阅加法运算符和复合赋值的讨论.更新操作数的存储值的副作用应发生在前一个和下一个序列点之间.

关于coumpund-assignment:

E1 op = E2形式的复合赋值与简单赋值表达式E1 = E1 op(E2)的不同之处仅在于左值E1仅被评估一次.

c c++ pointers post-increment compound-assignment

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