へー。私の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 プログラミングに慣れているので、どのようにコーディングすればよいかという私の考え方は、ほとんどの場合、間違っています。この動的配列割り当てに基づいて、指定した位置にレコードを挿入する新しい関数を作成できるようにしたいと考えています。そのための最善の方法を知りたいです。
配列の最後に新しいレコードを挿入してから、すべてを 1 つの位置に移動する必要があります。新しい配列を作成する必要がある場合は、i-1 要素をコピーしてから、i を配置して i+n 要素をコピーします。最初の配列を 2 つに分割し、3 番目の配列を作成して、すべてを混ぜ合わせる必要があります。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;
}