首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言中的泛型编程问题

C语言中的泛型编程问题
EN

Stack Overflow用户
提问于 2011-03-31 14:52:51
回答 4查看 270关注 0票数 2

我正在用C编写一个动态数组。

代码语言:javascript
运行
复制
typedef struct __c_array {
    void**_elem;
    int  cur_size;
    int  capacity;
}c_array;

我的界面如下所示:

代码语言:javascript
运行
复制
extern void push_back_c_array ( c_array*, void *);

现在,用户必须为要推入数组的元素分配内存。有没有办法使用void *来避免这种情况。

我想用它来做下面的事情

代码语言:javascript
运行
复制
int a = 5;
push_back_c_array ( <ARRAY_PTR>, a );

这有没有可能。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-31 15:00:09

如果您提供一个push_back_c_array()版本来复制所提供的值,这是可能的。为此,您将需要一个额外的参数,用于指定值的大小:

代码语言:javascript
运行
复制
push_back_c_array(c_array* arr, void* val, unsigned int size);

在堆中为新值分配内存,然后执行memcpy。但在此之后,您需要重新分配它。因此,您需要记住哪些值是由您分配的,哪些值是由调用者分配的。相当下流..。所以,如果你这样做了-总是这样做,并在你的函数的文档中描述这个约定。

票数 2
EN

Stack Overflow用户

发布于 2011-03-31 14:58:40

您的示例数组包含(void*)类型的项。它包含指针。您似乎希望它可以容纳任意类型。在本例中为int。您是想存储插入数据的副本,还是简单地存储调用者给您的指针?

不久前,我想为我正在编写的一个游戏提供类似于简单数组的行为,于是我想出了xrlist。一段时间后,我想要存储它们并随机访问它们,所以我想到了xrhash

xrlist和xrhash存储用户提供的指针,并期望所有元素具有相同的类型(xrhash有一个hashcode和比较回调函数)

票数 0
EN

Stack Overflow用户

发布于 2011-03-31 14:59:19

在开始时分配一小块内存(可能是用来容纳联合),然后推回元素,直到填满它,这样可能会更好。然后是realloc,或者分配一个两倍大小的数组,然后复制所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5496211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档