Cでそれを行うための適切でクリーンな方法が見つかるとは思いません。C++はそれを行う一部の言語であり、ほとんどすべてのOO指向言語はそれを行うことができますが、Cはできません。私が考えることができるのはメモリを移動し、はい、reallocを呼び出すか、メモリの再利用ポリシーで空と見なされる既知の値に解放する位置を設定します。
問題を解決するもう1つの方法は、アレイを動的に実装することです。そこに行きたいかどうかはわかりませんが、行きたい場合は、簡単な例を次に示します。
整数のみを保存しているので、次のような構造体:
typedef struct DynamicArray_st{
int x;
struct DynamicArray_st *next;
}DynamicArray;
プログラムが必要とする要素の割り当てと解放を可能にします。また、途中、開始、または終了に挿入することもでき、同じように無料で挿入できます。
これを行う方法は、この動的型の先頭へのポインターを保存してから、それを反復処理することです。問題は、[]表記ではデータにアクセスできないことです。反復が必要であり、処理時間が重くなります。
それ以外に、コードは次のようになります。
DynamicArray *array = malloc(sizeof(DynamicArray)); /*Just a first element that will stay empty so your Dynamic array persists*/
array->next = NULL;
DynamicArray *aux = array;
DynamicArray *new;
for(i = 0; i<4; i++){
new = malloc(sizeof(DynamicArray));
new->next = NULL;
new->x = i+1;
aux->next = new;
aux = new;
}
ここでは、各構造体が次の構造体を指し、内部に整数を持つように、構造体のシーケンスがあります。今ならあなたは次のようなことをするでしょう:
aux = array->next; /*array points to that empty one, must be the next*/
while(aux != NULL){
printf("%d\n",aux->x);
aux = aux->next;
}
次の出力が得られます。
1
2
3
4
そして、最初の要素を解放するのは次のように簡単です。
aux = array->next;
array->next = aux->next;
free(aux);
それを描画しようとすると(構造体はボックスで、next / aux / nextは矢印です)、1つのボックスの矢印がボックスの輪郭を示します-解放したいボックスです。
お役に立てれば。