使用函数调用实现堆栈

雅克琳

我对C的这一部分不清楚,因为它与我使用的其他语言有点不同,但这可能只是一个愚蠢的问题。我正在尝试实现一个堆栈。我有节点结构,它具有我要传递的信息:

struct position{
   int square[2];
   int counter;
   struct position *prev;
};

所以在main中,我声明并初始化堆栈的底部节点,将其设置*prevNULL,然后声明其余部分。我的问题是,当我尝试将其传递给函数时会发生什么pop我可以创建一个position指向该对象并返回该对象的对象,但是当函数关闭时,该对象是否会从堆栈中移出?还是应该返回mainposition并将其设置为等于新position对象?如果我决定在一个函数中创建几个这样的节点怎么办?函数关闭后它们是否仍会保留?

编辑:可能让我想起了我的后续问题,即如果函数外部不存在它们,是否应该使用malloc为它们在内存中创建空间?

h

对象的生存期取决于创建对象的位置。例如,如果您在代码块中声明一个结构(其中一个块是内部的所有内容{及其匹配项}),则该执行一旦离开该块,该结构便不再有效。只要该结构有效,指向该结构的指针就有效。

对于您要描述的内容,您想使用malloc()或类似的功能来动态分配结构动态分配的数据将保持有效(假设您不覆盖它),直到free()内存或程序终止为止。指向这些内存区域的指针将在同一时间段内保持有效。

考虑:

static struct position *topOfStack = NULL;

void push(struct position *node)
{
    node->prev = topOfStack;
    topOfStack = node;
}

struct position *pop()
{
    struct position *popped = topOfStack;
    if (topOfStack) topOfStack = topOfStack->pref;
    return popped;
}

要使用此功能,您可以:

f() {
    struct position *node = malloc(sizeof(*node));
    /* ... fill in node details ... */
    push(node);
}

注意,我是动态分配节点的。如果我刚刚声明了a struct position node;,我可以合法地调用,push(&node);但是一旦我的函数离开范围,堆栈中就会有一个无效的项目(这可能会造成破坏)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用调用堆栈在C中实现堆栈数据结构?

来自分类Dev

使用基于堆栈的调用约定进行汇编函数调用

来自分类Dev

函数调用堆栈溢出

来自分类Dev

使用存储的proc /函数在SQL Server中实现堆栈(LIFO)

来自分类Dev

使用数组实现堆栈

来自分类Dev

递归函数中的堆栈实现

来自分类Dev

使用gdb中的函数调用堆栈进行导航

来自分类Dev

运行递归函数时是否始终使用调用堆栈

来自分类Dev

GNU汇编器,使用堆栈的函数调用,seg错误

来自分类Dev

从调用堆栈获取函数指针

来自分类Dev

从调用堆栈获取函数指针

来自分类Dev

使用链表实现堆栈损坏

来自分类Dev

使用 o(1) 实现堆栈

来自分类Dev

在C中创建pop()函数堆栈实现

来自分类Dev

jquery重复使用参数调用函数导致超出最大调用堆栈

来自分类Dev

调用函数时,堆栈框架是否真的被压入堆栈?

来自分类Dev

调用PInvoke函数使堆栈不平衡

来自分类Dev

GDB-如何知道函数调用堆栈?

来自分类Dev

GDB-如何知道函数调用堆栈?

来自分类Dev

如何调试 Swift 的函数调用堆栈?

来自分类Dev

使用寄存器而不是堆栈从x64汇编中调用C函数

来自分类Dev

使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

来自分类Dev

为什么在使用赋值时不调用析构函数的堆栈变量?

来自分类Dev

在AdonisJS中使用.save()函数时,最大调用堆栈大小超出错误

来自分类Dev

使用寄存器而不是堆栈从x64汇编中调用C函数

来自分类Dev

JVM如何手动使用本机堆栈进行JAVA函数调用

来自分类Dev

未捕获的RangeError:在jQuery中使用.map函数时,超出了最大调用堆栈大小

来自分类Dev

使用堆栈实现优先级队列

来自分类Dev

使用2个堆栈实现队列

Related 相关文章

热门标签

归档