9

int*を使用してデータ型の動的配列を作成していmalloc()ます。しかし、問題は、配列の終わりを知る方法ですか?

\0forデータ型に相当するものがないint*ので、これを行う方法は? 関数の出力パラメータとしてサイズを渡しますか?

4

5 に答える 5

15

C は、他の言語とは異なり、配列の長さを管理しません。

このための構造を考えることができます:

typedef struct t_thing {
  int* things;
  size_t count;
} t_thing;

使用中で:

t_thing t = { (int*)malloc(sizeof(int) * n), n };
于 2012-04-19T00:47:14.147 に答える
10

\0整数に相当する「公式」はありませんが、独自の値を使用することはできます。たとえば、整数が距離を表す場合、-1 (有効な距離ではない) をセンチネル値として使用して、配列の末尾を示すことができます。

整数配列に任意の int値を合理的に含めることができる場合は、割り当てられた配列のサイズを追加のパラメーターと共に関数に返すことができます。

于 2012-04-19T00:45:29.627 に答える
1

NULL最終値として使用できます。エントリ数を追跡する配列を使用して、構造体に整数を追加できます。または、サイズを個別に追跡することもできます。好きなようにできます。

于 2012-04-19T00:47:05.433 に答える
1

malloc でメモリを割り当てると、割り当てられたバイト数は「malloc」されたメモリの開始直前に格納されます。サイズがわかれば終わりもわかる!これは、C の聖書、K&R の本で説明されています。ページ番号も教えていただきたいのですが、見ればわかると思います。

于 2012-04-19T05:41:52.820 に答える
1

C は、動的配列の末尾がどこにあるかを知りません。配列に割り当てるサイズを覚えておく必要があります。

于 2012-04-19T02:35:00.577 に答える