我有一个C程序,它是使用数组的队列操作。在该程序中,它们在数组内增加变量。我无法理解它是如何工作的。所以,请解释一下这些操作:
array[++i];
array[i++];
答案 0 :(得分:7)
请解释这些操作。
array[++i];
- 首先递增i
,然后以递增的索引为您提供元素
相当于:
++i; // or i++
array[i];
array[i++];
- 也是第一个增加i
,但postfix operator++
会在增量前返回i
的值
相当于:
array[i];
++i; // or i++
他们在数组内增加一个变量。
不,他们不是。你可以说它们在对数组下标运算符的调用中递增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++
和++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
,然后返回它的值。
现在尝试找到你的代码所做的事情; - )
希望这有帮助。
答案 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;
与上述相同的警告。