i ++和++ i有什么区别?

时间:2010-07-27 18:01:31

标签: c#

我已经看到它们都被用在很多C#代码中,我想知道何时使用i++++ii是一个数字变量intfloatdouble等)。谁知道这个?

7 个答案:

答案 0 :(得分:404)

答案 1 :(得分:172)

奇怪的是,看起来其他两个答案并没有拼出来,这绝对值得说:


i++表示'告诉我i的值,然后递增'

++i表示'递增i,然后告诉我价值'


它们是预增量,后增量运算符。 在这两种情况下,变量都会递增,但如果你要在完全相同的情况下取两个表达式的值,结果会有所不同。

答案 2 :(得分:21)

如果你有:

int i = 10;
int x = ++i;

然后x将为11

但如果你有:

int i = 10;
int x = i++;

然后x将为10

请注意,Eric指出,在两种情况下增量同时发生,但它是不同的结果给出的值(感谢Eric!)。

一般来说,我喜欢使用++i,除非有充分的理由不这样做。例如,在编写循环时,我喜欢使用:

for (int i = 0; i < 10; ++i) {
}

或者,如果我只需要增加一个变量,我喜欢使用:

++x;

通常情况下,这种方式或其他方式没有多大意义并且归结为编码风格,但如果您在其他任务中使用运算符(例如在我的原始示例中),那么了解潜在的副作用很重要

答案 3 :(得分:5)

int i = 0;
Console.WriteLine(i++); // Prints 0. Then value of "i" becomes 1.
Console.WriteLine(--i); // Value of "i" becomes 0. Then prints 0.

这会回答你的问题吗?

答案 4 :(得分:5)

运算符的工作方式是它同时递增,但如果它在变量之前,则表达式将使用递增/递减的变量进行求值:

int x = 0;   //x is 0
int y = ++x; //x is 1 and y is 1

如果它在变量之后,当前语句将使用原始变量执行,就好像它还没有递增/递减一样:

int x = 0;   //x is 0
int y = x++; //'y = x' is evaluated with x=0, but x is still incremented. So, x is 1, but y is 0

除非必要,否则我同意dcp使用预增量/减量(++ x)。真的是我使用后递增/递减的唯一时间是while循环或那种循环。这些循环是相同的:

while (x < 5)  //evaluates conditional statement
{
    //some code
    ++x;       //increments x
}

while (x++ < 5) //evaluates conditional statement with x value before increment, and x is incremented
{
    //some code
}

您也可以在索引数组时执行此操作:

int i = 0;
int[] MyArray = new int[2];
MyArray[i++] = 1234; //sets array at index 0 to '1234' and i is incremented
MyArray[i] = 5678;   //sets array at index 1 to '5678'
int temp = MyArray[--i]; //temp is 1234 (becasue of pre-decrement);

Etc等......

答案 5 :(得分:4)

只是为了记录,在C ++中,如果你可以使用(即)你不关心操作的顺序(你只想增加或减少并在以后使用它)前缀运算符更有效,因为它不必创建对象的临时副本。不幸的是,大多数人使用posfix(var ++)而不是前缀(++ var),因为这是我们最初学到的。 (我在接受采访时被问到这个问题)。不确定在C#中是否属实,但我认为它会是。

答案 6 :(得分:0)

简单的代码说明

int i = 0;

if (i++ > 0)
{
    //will not execute, but "i" is icremented
}