繁体   English   中英

数组内的增量运算符

[英]Increment operator inside array

我有一个 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++ inrements 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值的地方。

2的区别在于i++是后自增, ++i是前自增。 这是什么意思?

好吧,假设i是 6。当你这样做时:

array[i++]
array[i]

你实际上会做:

array[6]
array[7]

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

如果你这样做:

array[++i]
array[i]

你基本上会做:

array[7]
array[7]

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

现在尝试查找您的代码的作用;-)

希望这可以帮助。

数组[++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;

与上述相同的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM