数组内的增量运算符

Increment operator inside array

本文关键字:运算符 数组      更新时间:2023-10-16

我有一个使用数组执行队列操作的C程序。在该程序中,它们递增数组内的变量。我不明白这是怎么回事。因此,请解释这些操作:

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

请解释这些操作。

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

    相当于:

    ++i; // or i++
    array[i];
    
  2. array[i++]; - 也是第一个递增i,但后缀operator++在递增之前返回i的值

    相当于:

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

它们递增数组内的变量。

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

++i

计算之前递增i

评估i i++

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

如果i=1array[i++]获取array[1]然后设置i=2

后操作和预操作发生在它们参与的表达评估之后之前

我通常不鼓励在表达式中使用后置和前递增运算符。 它们充其量会导致混乱,最坏的情况会导致错误。

考虑一下x = array[++i] + array[i--] ;应该是什么。 看看混淆程序员(或必须修复代码的可怜魔鬼?:-(是多么容易。

后置和前递增和递减操作也会在宏中产生问题,因为您最终可能会多次复制操作,尤其是对于宏。

它更简单,更容易生成维护代码,以避免表达式中的后置和前增量,IMO。

所以,你知道i++++i i以 1 递增。此外,此指令返回 i ,因此您可以将其放在代码中需要 i 值的位置。

两者之间的区别在于i++是后递增,++i是前递增。这是什么意思?

好吧,假设i是 6。当您执行以下操作时:

array[i++]
array[i]

你实际上会做:

array[6]
array[7]

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

如果您这样做:

array[++i]
array[i]

你基本上会做:

array[7]
array[7]

因为你使用前增量:第一个增量i,然后返回其值。

现在尝试找到你的代码做了什么;-(

希望这有帮助。

array[++i]; - 递增 i 的值,然后将递增的值用作数组的索引

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

我知道

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

想象一个基于阵列的堆栈:

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

在此示例中,堆栈"向下"增长,其中索引 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;

与上述警告相同。

您是否尝试将++用作数学运算符,c++不会尝试将其用作数学运算符而不是递增它,因为它在方括号运算符内,并且您不能使用++作为数学运算符。 ++ 仅用于递增变量,而不用作数学运算符。