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

如何在C中的ADT上执行深度复制?,c,C,最近,我正在用C语言为队列编写一些抽象数据类型(ADT)。 但我发现C中的ADT存在一个问题: 如何在C中传递数据类型 例如,在C++中,我可以使用模板传递类型: std::queue< struct mySt > myQ; 并使用如下所示的铸造方式将其弹出: void enq(void *dataPtr); struct mySt *a = (struct mySt *) deq() 这在C语言中似乎是可行的,但如何执行“深度复制”操作呢?我的意思是为指针dataPtr的内

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

如何在C中传递数据类型

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

 std::queue< struct mySt > myQ;
并使用如下所示的铸造方式将其弹出:

void enq(void *dataPtr);
struct mySt *a = (struct mySt *) deq()
这在C语言中似乎是可行的,但如何执行“深度复制”操作呢?我的意思是为指针dataPtr的内容创建一个新的内存空间,而不是仅仅指向它?
除了使用宏或函数指针来解决这个问题,还有其他更好的解决方法吗?

< P>在C中没有一种简单的方法来实现。C++代码依赖于构造函数(拷贝构造函数)来实现拷贝,这是必要的,因为当创建结构的独立副本时,您无法预先判断类或分配的内存中是否有需要更改的指针

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

传递指针更简单;很明显,所指向的对象仍然存在,不会因为其指针现在存储在列表中而被修改