如果我有像这样的代码:
int pop()
{
return stack[--stp];
}我知道它在做两件事。它返回元素'stp‘中一维数组'stack’中包含的值。它还在递减'stp‘。
但是这种情况是以什么顺序发生的呢?
它是否返回元素stp的值,然后递减stp
或者它递减stp,然后返回现在由递减后的stp引用的元素的值?
如果代码是:
int top()
{
return stack[stp-1];
}它的工作方式有什么不同?
抱歉,我知道这是一种非常常见的编码风格--我仍然很难理解简洁的、未注释的代码--甚至像这样的基础代码。抱歉的。
发布于 2010-11-19 23:00:47
它将递减stp,然后返回新stp值所在位置的数组中的值。
--stp是一个“前缀减量”,它被定义为递减参数(stp),然后返回新值。它有一个被称为“后缀减量”的对应物,stp--,它递减stp,然后返回旧值-因此stack[stp--]将给你当前stp偏移量的值,但仍然递减stp。
最后,您的stack[stp-1]版本将从与stack[--stp]相同的位置返回值,但stp本身将保持不变。
发布于 2010-11-19 22:57:39
简单的答案是:先递减,然后数组访问。
更复杂的答案:这段代码使用前缀减量运算符,这是预减。这意味着运算符的结果值是执行递减后的值。
将其与后减量运算符进行对比。return stack[stp--];也会递减stp,但使用的索引将是初始值。
由于复杂的技术原因,允许编译器最大限度地进行优化,所以在修改stp时并没有确切地定义它。但可以确定的是,用作数组索引的值是stp在递减后所具有的值。
您的top()代码根本不修改stp,但是它用作数组索引的值比stp的初始值小1,这一点是相同的。因此,如果调用top(),则返回的值与下次调用pop()时的值相同。
发布于 2010-11-19 23:00:44
--stp =预减。stp在used.stp-- =后递减之前递减。stp在使用后会递减。https://stackoverflow.com/questions/4226163
复制相似问题