我正在用 C 编写一个动态数组。
typedef struct __c_array {
void**_elem;
int cur_size;
int capacity;
}c_array;
我的界面是这样的:
extern void push_back_c_array ( c_array*, void *);
现在用户必须为要插入数组的元素分配内存。有什么方法可以使用 void * 来避免这种情况。
我想用它来做以下事情
int a = 5;
push_back_c_array ( <ARRAY_PTR>, a );
这可能吗。
最佳答案
如果您提供一个 push_back_c_array() 版本,则有可能复制所提供的值。为此,您需要一个额外的参数来指定值的大小:
push_back_c_array(c_array* arr, void* val, unsigned int size);
您在堆中为新值分配内存,然后执行 memcpy。但在那之后你需要将它重新分配。因此,您需要记住,哪些值是由您分配的,哪些是由调用者分配的。相当讨厌......所以,如果你这样做 - 总是这样做,并在你的函数的文档中描述这个约定。
关于c - C 问题中的泛型编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5496211/