質問

構造を宣言できます:

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

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

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

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

役に立ちましたか?

解決

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

C99は複合リテラルを導入します。ドブス博士の記事はこちらをご覧ください:新しいC:複合リテラル

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)でテスト済み。

ドブス博士の記事を読んで、複合リテラルの仕組みを理解する必要があります。

他のヒント

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

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top