c - C 问题中的泛型编程

标签 c

我正在用 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/

相关文章:

C 只删除文件的一部分

Python - 在 Django 中使用结构解包

c - 为什么将随机值显示为输出来查找矩阵的行列式?

c - 字符串数组在 C 中不断打印最后一个条目

c - 二叉树的结构分配

c - Shellcoder手册: first shellcode example

c - 毕达哥拉斯三胞胎

c - Code Composer Studio 中的 sscanf 读取 0 而不是值

c - C 中自定义 getln 函数缺少原型(prototype)错误消息的解释

c - gcc 找不到-lglfw3