我是 C 新手,有一个关于动态数组的问题。
我正在构建一个游戏,以便当用户输入 6 个数字使其与代码生成的 6 个随机数匹配时,用户获胜。
我正在尝试创建一个动态数组来存储用户的猜测,直到用户正确得到答案。但是,我不确定这将如何运作。我是否会创建一个函数,以便每当用户得到错误的答案时,我都会调用该函数来创建一个新的动态数组来存储用户的猜测?
一个可以动态增长的“向量”需要跟踪什么?
可以存储
int
值的一个。
typedef struct int_vec {
size_t sz;
size_t allocated_sz;
int *data;
} int_vec_t;
当你想分配向量时:
int_vec_t *make_int_vec(size_t starting_capacity) {
int_vec_t *vec = malloc(sizeof(*vec));
if (!vec) return NULL;
vec->data = malloc(sizeof(int) * starting_capacity);
if (!vec->data) {
free(vec);
return NULL;
}
vec->sz = 0;
vec->allocated_sz = starting_capacity;
return vec;
}
当您希望向量增长时,最好以 +1 以外的因子来实现。为了简单起见,我们使用 x2。您可以使用
realloc
来完成此操作,但如果 realloc
失败,我们将使用 vec->data
之外的指针来测试它,这样我们就不会让原始指针悬空。一旦我们知道它成功了,我们就可以将其分配给vec->data
。
int_vec_t *grow_int_vec(int_vec_t *vec) {
if (!vec) return NULL;
int *new_data = realloc(vec->data, sizeof(int) * vec->allocated_sz * 2);
if (!new_data) return NULL;
vec->data = new_data;
vec->allocated_size *= 2;
return vec;
}