int*
を使用してデータ型の動的配列を作成していmalloc()
ます。しかし、問題は、配列の終わりを知る方法ですか?
\0
forデータ型に相当するものがないint*
ので、これを行う方法は? 関数の出力パラメータとしてサイズを渡しますか?
C は、他の言語とは異なり、配列の長さを管理しません。
このための構造を考えることができます:
typedef struct t_thing {
int* things;
size_t count;
} t_thing;
使用中で:
t_thing t = { (int*)malloc(sizeof(int) * n), n };
\0
整数に相当する「公式」はありませんが、独自の値を使用することはできます。たとえば、整数が距離を表す場合、-1 (有効な距離ではない) をセンチネル値として使用して、配列の末尾を示すことができます。
整数配列に任意の int
値を合理的に含めることができる場合は、割り当てられた配列のサイズを追加のパラメーターと共に関数に返すことができます。
NULL
最終値として使用できます。エントリ数を追跡する配列を使用して、構造体に整数を追加できます。または、サイズを個別に追跡することもできます。好きなようにできます。
malloc でメモリを割り当てると、割り当てられたバイト数は「malloc」されたメモリの開始直前に格納されます。サイズがわかれば終わりもわかる!これは、C の聖書、K&R の本で説明されています。ページ番号も教えていただきたいのですが、見ればわかると思います。
C は、動的配列の末尾がどこにあるかを知りません。配列に割り当てるサイズを覚えておく必要があります。