[英]Increment operator inside array
我有一个 C 程序,它使用数组进行队列操作。 在那个程序中,他们在数组中增加一个变量。 我无法理解它是如何工作的。 所以,请解释一下这些操作:
array[++i];
array[i++];
请解释这些操作。
array[++i];
- 首先增加i
,然后在增加的索引处为您提供元素
相当于:
++i; // or i++ array[i];
array[i++];
- 也首先增加i
,但后缀operator++
在增加之前返回i
的值
相当于:
array[i]; ++i; // or i++
他们在数组中增加一个变量。
不,他们没有。 您可以说它们在对数组下标运算符的调用中增加i
。
++i
在评估它之前增加i
。
i++
inrements i
在评估它之后。
如果i=1
则array[++i]
设置i=2
然后获取array[2]
。
如果i=1
则array[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.