此代码来自Zed Shaw 的《Learn C The Hard Way》。在练习 34 中,实践问题之一是实现动态数组,它只是包含在结构中的指针数组。
该结构如下所示:
typedef struct DArray {
int end;
int max;
size_t element_size;
size_t expand_rate;
void **contents;
};
Run Code Online (Sandbox Code Playgroud)
要初始化其中之一,我们使用 DArray_create()
DArray *DArray_create(size_t element_size, size_t initial_max)
{
DArray *array = malloc(sizeof(DArray));
array->max = initial_max;
array->contents = calloc(initial_max, sizeof(void *));
array->end = 0;
array->element_size = element_size;
array->expand_rate = 300;
return array;
}
Run Code Online (Sandbox Code Playgroud)
还有一个调整数组大小的函数:
static inline int DArray_resize(DArray *array, size_t newsize)
{
array->max = newsize;
void *contents = realloc(array->contents, array->max * sizeof(void *));
array->contents …Run Code Online (Sandbox Code Playgroud)