gpt4 book ai didi

c - 为什么队列和栈声明为指针?

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:22 28 4
gpt4 key购买 nike

我正在学习数据结构,但我不明白为什么需要像这样声明堆栈和队列:

struct stack *Stack;

(忘记 struct 语法)

我的意思是,为什么它总是声明为指针?

最佳答案

它们并不总是这样声明的!

一般来说,将一个变量声明为指针对于以后动态分配它很有用。这可能是由于以下几个原因造成的:

  • 变量对于程序栈来说太大了
  • 你想从一个函数中返回那个变量

在您的情况下,让我们考虑两种不同的堆栈实现方式:

struct stack
{
void *stuff[10000];
int size;
};

这是一个糟糕的实现,但假设您有这样的实现,那么您很可能不想将它放在程序堆栈中。

或者,如果您有:

struct stack
{
void **stuff;
int size;
int mem_size;
};

无论如何,您都可以动态更改 stuff 的大小,因此在程序堆栈上声明类型为 struct stack 的变量绝对没有坏处,即像这样:

struct stack stack;

除非您希望从函数中返回它。例如:

struct stack *make_stack(int initial_size)
{
struct stack *s;

s = malloc(sizeof(*s));
if (s == NULL)
goto exit_no_mem;

if (initial_size == 0)
initial_size = 1;
s->stuff = malloc(initial_size * sizeof(*s->stuff));
if (s->stuff == NULL)
goto exit_no_stuff_mem;

s->size = 0;
s->mem_size = initial_size;

return s;
exit_no_stuff_mem:
free(s);
exit_no_mem:
return NULL;
}

不过,就我个人而言,我会这样声明函数:

int make_stack(struct stack *s, int initial_size);

并在程序栈上分配struct stack

关于c - 为什么队列和栈声明为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141519/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com