1

私はその結果が

int *x = malloc(sizeof(int)*100);

int x[100];

同じですが、最初の1つはヒープメモリの割り当てであり、2つ目はスタックメモリの割り当てです。

ここで、巨大な配列(パターンではなく約10000要素)を作成する必要があります。malloc()の方が適していると思います。

しかし、配列を初期化する準備ができたら、問題が発生します。ループを使用して配列を初期化することはできません。mallocを使用して作成された配列を、使用するのと同じように初期化するにはどうすればよいですか。

int x[100] = {1,2,3,4,......,6,7,5};
4

3 に答える 3

2

と言うときは、初期化子int a[] = { 1, 2, 3 };を使用して、配列の初期データを提供します(そして配列のサイズを推測します)。これはCの文法の一部です。a

と言うときint * p = malloc(1000);は、単にライブラリ呼び出しを行い、ポインタを格納しているだけです。言語またはライブラリには、このポインタが指すメモリの初期値を提供するメカニズムはありません。また、ポインタが何かを指す必要もありません(可能性がありますNULL)。

配列はポインターではなく、ポインターは配列ではないことに注意してください。aあなたが言うことができるという事実にもかかわらず、そしてp完全に異なる動物ですp[1] = a[1];

于 2012-11-18T19:52:34.863 に答える
0

ループで配列を初期化できない場合は、それを使用して回避することができますmemset()

于 2012-11-18T19:52:45.543 に答える
0

データが変わらない場合は、次のように書くのが最善の方法です。

static const int x [100] = { 23, 12, 5, 7, ... };

コードはありません。初期化に時間は必要ありません。私は実際に、メガバイトのデータを問題なく初期化するコードを見てきました。

于 2015-06-05T15:29:59.080 に答える