に固定サイズの配列がありC
ます。そこには、(配列サイズよりも少ない) 有用な要素がいくらでもある可能性があります。今、私は自分の有用な要素だけが必要です。end of array
そこで、整数配列にマーカーを使用することを考えています。初めに
a) これは可能ですか?
b) 可能であれば、どのように?
に固定サイズの配列がありC
ます。そこには、(配列サイズよりも少ない) 有用な要素がいくらでもある可能性があります。今、私は自分の有用な要素だけが必要です。end of array
そこで、整数配列にマーカーを使用することを考えています。初めに
a) これは可能ですか?
b) 可能であれば、どのように?
少し違うアプローチをとります
struct IntArray
{
int data[N];
int size; // <-- use this to keep track of the size.
}
論理的には、 END_OF_ARRAY として機能する一意の整数を見つけることができ、有用な数値のセットに存在しない場合は可能です...
最後に明示的に追加する必要があります...そして、後で終了を示す番号を確認します
配列の内容と有効な値によって異なります。
あなたはintの配列を持っていると言います。リストには無効な値を使用してください。すべてのエントリが正の場合は、最後に負の数を使用します。値がすべて INT_MAX 未満の場合は、それを終了マーカーとして使用します。
配列を常にバッファとして扱い、現在の有用な要素の数を追跡できます。
struct buffer
{
int* array;
size_t size;
}
これを行うには 2 つの方法があります (int 値が int の任意の値を持つ可能性がある場合)。
最初のオプション:要素の数を配列に格納し、アイテムを追加/削除する場合は値を増やします。
int count;
int *array;
2 番目のオプション:配列内の次の変数へのポインターを持つ構造体を作成します。NULL
リストの最後に到達した場合。
struct Item {
int i;
struct Item *next;
}
// pointing at the start adress:
struct Item *start = NULL;
// adding first item:
start = malloc(sizeof(struct Item));
start->i = 123;
start->next = NULL // mark the current end of list (not needed if you add a value right after the first)
// adding second item:
start->next = malloc(sizeof(struct Item));
start->next->i = 456;
start->next->next = NULL
// etc
はい、という整数変数を作成しますend_of_array_marker
。
これよりも複雑にする必要がありますか?