C++中一些神秘的堆栈机制

Some mysterious stack mechanism in C++

本文关键字:堆栈 栈机制 C++      更新时间:2023-10-16

在学习如何编写快速排序时,我遇到了一个对我来说非常不清楚的实现

void quick_sort_iterative(int start, int end)
{
    range stack[32]; // 1. why 32? why not 2? why not 1024? what is it?
    range * s = stack; // 2. just a simple pointer = an array?
    s->start = start; // 3. are these two values currently on top of the stack?
    s->end = end;
    s++; // 4. how does it work? it's pushing something on the stack?
    // sort as long as there are any ranges [start, end] to sort left
    while (s > stack) // 5. comparing a pointer and an array and it works?

有人能给我解释一下这5件事吗非常感谢。

以下是整个代码(页面上的最后一个代码,带有说明):代码

所以。假定range是具有两个整数参数startend的某个对象。我说不出更多了。

  1. 无论出于何种原因,算法的设计者相信他们不需要超过32个假堆栈帧
  2. 数组衰减为指针。您可以将其视为&stack[0]
  3. CCD_ 5当前与CCD_ 6相同
  4. CCD_ 7现在指向CCD_
  5. 数组衰减为指针。只要s不指向&stack[0],这就是真的
  1. 也许只是从它们的下部区域中选择的一个数字,或者可能是通过仔细检查算法的最大堆栈深度得出的。我猜是前者
  2. 在需要指针的上下文中使用时,任何数组变量都会自然衰减为指针
  3. 如果您认为"stack"数组的第一个元素是顶部,那么是的
  4. 给定3中的假设,则递增指针确实会移动到堆栈上的下一个元素
  5. 参见2。假设循环正在递减s,并且当它再次到达堆栈顶部时,他们希望停止