3

構造体を宣言できます:

typedef struct
{
  int var1;
  int var2;
  int var3;
} test_t;

次に、これらの構造体構造の配列をデフォルト値で作成します。

test_t theTest[2] =
{
   {1,2,3},
   {4,5,6}
};

しかし、配列を作成した後、ループなしですべての値を明示的に指定して、1行だけを使用して、上記と同じ方法で値を変更する方法はありますか?

4

4 に答える 4

8

C99 では、各構造を 1 行で割り当てることができます。ただし、構造体の配列を1行で割り当てることはできないと思います。

C99 では複合リテラルが導入されています。Dr. Dobbs の記事を参照してください: The New C: Compound Literals

theTest[0] = (test_t){7,8,9};
theTest[1] = (test_t){10,11,12};

次のようにポインターに割り当てることができます。

test_t* p; 
p = (test_t [2]){ {7,8,9}, {10,11,12} };

memcpy も使用できます。

memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]);

上記は Linux でgcc -std=c99 (バージョン 4.2.4) でテスト済みです。

複合リテラルがどのように機能するかを理解するには、Dr. Dobbs の記事を読む必要があります。

于 2009-08-03T18:11:48.613 に答える
2

値をゼロ (または -1) に設定する場合は、次を使用できますmemset

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));
于 2009-08-03T18:09:07.977 に答える
0

いいえ、この方法でのみ配列を初期化できます。ただし、「1行」メソッドを使用して構造の値を変更できます

于 2009-08-03T18:05:57.563 に答える
0

変数が別のソースからコピーされている場合は、memcpy などのメソッドを使用して構造体の値を直接上書きできます。

ただし、この言語では、個々の要素を設定する以外に、値を設定する直接的な方法は提供されていません。

于 2009-08-03T18:06:07.063 に答える