gpt4 book ai didi

c++ - typedef struct elt *堆栈;为什么这里有一个*

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:15 24 4
gpt4 key购买 nike

这是使用链表实现 Stack 的完整代码。它来自 James Aspnes 为耶鲁大学编写的数据结构笔记(有什么好处吗?)

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

struct elt {
struct elt *next;
int value;
};

/*
* We could make a struct for this,
* but it would have only one component,
* so this is quicker.
*/
typedef struct elt *Stack;

#define STACK_EMPTY (0)

/* push a new value onto top of stack */
void
stackPush(Stack *s, int value)
{
struct elt *e;

e = malloc(sizeof(struct elt));
assert(e);

e->value = value;
e->next = *s;
*s = e;
}

int
stackEmpty(const Stack *s)
{
return (*s == 0);
}

int
stackPop(Stack *s)
{
int ret;
struct elt *e;

assert(!stackEmpty(s));

ret = (*s)->value;

/* patch out first element */
e = *s;
*s = e->next;

free(e);

return ret;
}

/* print contents of stack on a single line */
void
stackPrint(const Stack *s)
{
struct elt *e;

for(e = *s; e != 0; e = e->next) {
printf("%d ", e->value);
}

putchar('\n');
}

int
main(int argc, char **argv)
{
int i;
Stack s;

s = STACK_EMPTY;

for(i = 0; i < 5; i++) {
printf("push %d\n", i);
stackPush(&s, i);
stackPrint(&s);
}

while(!stackEmpty(&s)) {
printf("pop gets %d\n", stackPop(&s));
stackPrint(&s);
}

return 0;
}

我能看懂大部分代码。但我无法理解这部分typedef struct elt *Stack;

为什么Stack前面有一个*,它是什么意思?

我发现了指针的概念,尤其是函数的返回类型难以掌握。提前致谢。

最佳答案

I can understand most of the code. But I can't wrap my head around this part typedef struct elt *Stack;

那是使用 typedef*。这只是意味着当你写

Stack x;

在你的代码中它意味着:

struct elt * x;

如果你使用

Stack *s;

在你的代码中它意味着:

struct elt ** s;

I'm finding a concepts of pointers, especially in return types of functions hard to grasp. Thanks in advance.

然后我建议您在继续执行该代码之前先了解指针和指向指针的指针。


*我认为 C 和 C++ 中的 typedef 存在一些细微差别:see here

关于c++ - typedef struct elt *堆栈;为什么这里有一个*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129533/

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