gpt4 book ai didi

c++ - 我需要帮助思考在 C 中实现 C++ 样式链表的不同方法

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

这是我的 C 类作业;我已经有使用 C++ 的经验。我遇到的问题是我的实现看起来简直是阴暗的 hell 。我当前的实现一次只允许使用一个 LinkedList。我知道我总是可以传递一个指向结构的指针,但我想避免这种情况。因此,它变得非常阴暗。我也没有办法规范功能的范围;它们在全局范围内可见。还要注意指向 h 文件中结构的指针;这就是为什么我不能有超过一对一的程序的原因。除了传入指向每个函数的指针,还有谁能想到别的办法吗?

目前只是单链,但双链不会超过30分钟。

LinkedList.h

LinkedList.c

最佳答案

是的,在 C 中,您会将指向结构的指针传递给对其进行操作的每个函数。

typedef struct list list_t;

list_t *list_new();
void list_delete(list_t *list);
void list_insert_back(list_t *list, void *obj);
void list_insert_front(list_t *list, void *obj);
/* etc. */

我不确定您所说的“调节范围”是什么意思。如果您在谈论函数名称,那么您通常会在函数名称前加上一个通用前缀,例如上面的 list_

在幕后,这最终与 C++ 代码一样工作。 C++ 编译器为成员函数添加前缀(如示例使用 list_,尽管 C++ 编译器的做法有所不同),C++ 编译器还隐式传递了 this 参数。

事实上,最古老的 C++ 编译器 (cfront) 会像上面那样将 C++ 代码直接翻译成 C 代码。

请注意,与典型的 C++ 方法相比,您不必在头文件中定义链表结构——这允许您在不破坏 ABI 兼容性的情况下更改数据结构。

关于c++ - 我需要帮助思考在 C 中实现 C++ 样式链表的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114972/

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