gpt4 book ai didi

c - 如何在 C 中的 ADT 执行深拷贝?

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

最近,我正在用 C 语言为队列编写一些抽象数据类型 (ADT)。但是我在 C 中发现了 ADT 的问题:

How can I pass the type of data in C?

例如,在C++中我可以使用模板来传递类型:

 std::queue< struct mySt > myQ;

该模板将通过“struct mySt”类型来创建 myQ。但是如何在 C 中做到这一点?我所知道的是创建一个通用指针来推送“struct mySt”的数据,如下所示:

void enq(void *dataPtr);

然后像下面这样使用转换弹出它:

struct mySt *a = (struct mySt *) deq()

这似乎在 C 中可行,但我怎样才能执行“深层复制”操作?我的意思是为指针dataPtr的内容创建一个新的内存空间而不是仅仅指向它?除了使用宏或函数指针来解决这个问题,还有其他更好的方法来解决吗?

最佳答案

在 C 中没有一种简单的方法可以做到这一点。C++ 代码依赖于构造函数(复制构造函数)来实现复制,这是必要的,因为您无法先验地判断类中是否存在指针或在制作结构的独立副本时需要更改的已分配内存。

如果您要在 C ADT 中复制结构,那么您至少需要指定要作为接口(interface)的一部分复制的结构的大小。但是,您确实需要一个知道如何处理结构副本中的指针的复制函数。

传递指针更简单;很明显,指向的对象继续存在且未修改,因为它的指针现在存储在列表中。

关于c - 如何在 C 中的 ADT 执行深拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25473263/

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