增加数组内的运算符

时间:2015-12-13 12:16:35

标签: c++ c arrays post-increment pre-increment

我有一个C程序,它是使用数组的队列操作。在该程序中,它们在数组内增加变量。我无法理解它是如何工作的。所以,请解释一下这些操作:

array[++i];
array[i++];

5 个答案:

答案 0 :(得分:7)

  

请解释这些操作。

  1. array[++i]; - 首先递增i,然后以递增的索引为您提供元素

    相当于:

    ++i; // or i++
    array[i];
    
  2. array[i++]; - 也是第一个增加i,但postfix operator++会在增量前返回i的值

    相当于:

    array[i];
    ++i; // or i++
    
  3.   

    他们在数组内增加一个变量。

    不,他们不是。你可以说它们在对数组下标运算符的调用中递增i

答案 1 :(得分:3)

在评估之前++i增加i

评估后,i++ inrements i

如果i=1,则array[++i]设置i=2,然后抓取array[2]

如果i=1然后array[i++]抓取array[1],则设置i=2

之后

我通常不鼓励在表达式中使用post和pre increment运算符。它们最多会导致混乱,最坏的情况也会导致错误。

考虑x = array[++i] + array[i--] ;应该是什么。看看让程序员(或者那些必须修改你的代码的可怜的恶魔)混淆是多么容易?:-)。

后期和预增量和减量操作也会在宏中产生问题,因为最终可能会多次重复操作,特别是对于宏。

它更简单,并且更容易维护代码,以避免表达式中的post和pre增量,IMO。

答案 2 :(得分:3)

因此,您知道i++++ii增加为1.此外,此指令返回i,因此您可以将它放在您需要的代码中的某处i的价值。

2之间的区别在于i++是后增量,++i是预增量。这是什么意思?

好吧,让我们说i是6.当你这样做时:

array[i++]
array[i]

你实际上会这样做:

array[6]
array[7]

因为您使用后增量:首先返回值,然后增加i

如果你这样做:

array[++i]
array[i]

你基本上会这样做:

array[7]
array[7]

因为你使用预增量:首先增加i,然后返回它的值。

现在尝试找到你的代码所做的事情; - )

希望这有帮助。

答案 3 :(得分:1)

阵列[++ I]; - 递增i的值,然后使用递增的值作为数组的索引

阵列[I ++]; - 索引到数组中,然后递增i的值

答案 4 :(得分:0)

我知道你的问题是在队列的上下文中,但我将使用堆栈进行说明。

想象一下基于数组的堆栈:

T stack[N];     // for some type T
size_t sp = N;  // stack pointer

在这个例子中,堆栈增长"向下",其中index N - 1是堆栈的底部,索引0是顶部。

推送操作如下所示:

stack[--sp] = val;

--sp评估为sp - 1,而副作用会减少sp中的值,因此上述语句相当于编写

stack[sp - 1] = val;
sp = sp - 1;

需要注意的是sp可能会在分配完成之前更新。

弹出操作如下所示:

val = stack[sp++];

sp++评估sp的当前值,并且副作用会增加sp中的值,因此它等同于写作

val = stack[sp];
sp = sp + 1;

与上述相同的警告。