如何在C中的ADT执行深层复制?

时间:2014-08-24 15:27:30

标签: c

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

  

如何在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的内容创建一个新的内存空间而不仅仅指向它? 除了使用宏或函数指针来解决这个问题,还有其他更好的方法来解决它吗?

1 个答案:

答案 0 :(得分:1)

在C语言中没有简单的方法.C ++代码依赖于构造函数(复制构造函数)来实现副本,这是必要的,因为你不能告诉先验是否有指针在类或分配的内存中,当需要对结构的独立副本进行更改时。

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

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

相关问题