嘿嘿。在我的 C 程序中,我处理大量的操作,在这些操作中我必须读取文件并将其数据存储在数组中。为此,由于 C 中的数组处理有点复杂,我正在使用这篇文章中建议的以下代码:C 动态增长数组
typedef struct {
float *array;
size_t used;
size_t size;
} points;
void initArrayInd(arrayInd *a, size_t initialSize) {
a->array = (GLubyte *)malloc(initialSize * sizeof(GLubyte));
a->used = 0;
a->size = initialSize;
}
void insertArrayInd(arrayInd *a, GLubyte element) {
if (a->used == a->size) {
a->size *= 2;
a->array = (GLubyte *)realloc(a->array, a->size * sizeof(GLubyte));
}
a->array[a->used++] = element;
}
void freeArrayInd(arrayInd *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
我已经习惯了 Java 编程,所以在大多数情况下,我认为应该如何编写代码的方式是错误的。我想,基于这个动态数组分配,能够创建一个新函数,它将在我指定的位置插入一条记录。我想知道这样做的最佳方法是什么。
我是否应该在数组末尾插入新记录,然后将所有内容移一个位置。我应该创建一个新数组,复制 i-1 个元素,然后放置 i 并复制 i+n 个元素。我是否应该将初始数组一分为二,创建第三个并将所有内容混合在一起。C 中实现这一目标的最佳方法是什么?
编辑:这会做吗?
void insertFPointsAt(points *a, float element, int position) {
if (a->used == a->size) {
a->size *= 2;
a->array = (float *)realloc(a->array, a->size * sizeof(float));
}
memmove(&a->array[position], &a->array[position+1], &a->array[a->used] - &a->array[position]);
a->array[position] = element;
}