首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >return stack[--stp];-哪个先发生?stp是递减的还是返回元素?

return stack[--stp];-哪个先发生?stp是递减的还是返回元素?
EN

Stack Overflow用户
提问于 2010-11-19 22:55:14
回答 8查看 265关注 0票数 2

如果我有像这样的代码:

代码语言:javascript
复制
int pop()
{
    return stack[--stp];
}

我知道它在做两件事。它返回元素'stp‘中一维数组'stack’中包含的值。它还在递减'stp‘。

但是这种情况是以什么顺序发生的呢?

它是否返回元素stp的值,然后递减stp

或者它递减stp,然后返回现在由递减后的stp引用的元素的值?

如果代码是:

代码语言:javascript
复制
int top()
{
    return stack[stp-1];
}

它的工作方式有什么不同?

抱歉,我知道这是一种非常常见的编码风格--我仍然很难理解简洁的、未注释的代码--甚至像这样的基础代码。抱歉的。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-11-19 23:00:47

它将递减stp,然后返回新stp值所在位置的数组中的值。

--stp是一个“前缀减量”,它被定义为递减参数(stp),然后返回新值。它有一个被称为“后缀减量”的对应物,stp--,它递减stp,然后返回旧值-因此stack[stp--]将给你当前stp偏移量的值,但仍然递减stp

最后,您的stack[stp-1]版本将从与stack[--stp]相同的位置返回值,但stp本身将保持不变。

票数 7
EN

Stack Overflow用户

发布于 2010-11-19 22:57:39

简单的答案是:先递减,然后数组访问。

更复杂的答案:这段代码使用前缀减量运算符,这是预减。这意味着运算符的结果值是执行递减后的值。

将其与后减量运算符进行对比。return stack[stp--];也会递减stp,但使用的索引将是初始值。

由于复杂的技术原因,允许编译器最大限度地进行优化,所以在修改stp时并没有确切地定义它。但可以确定的是,用作数组索引的值是stp在递减后所具有的值。

您的top()代码根本不修改stp,但是它用作数组索引的值比stp的初始值小1,这一点是相同的。因此,如果调用top(),则返回的值与下次调用pop()时的值相同。

票数 2
EN

Stack Overflow用户

发布于 2010-11-19 23:00:44

  • --stp =预减。stp在used.
  • stp-- =后递减之前递减。stp在使用后会递减。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4226163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档