C-構造体の配列のすべての値を1行で変更する
-
11-07-2019 - |
質問
構造を宣言できます:
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などのメソッドを使用して、構造体の値を直接上書きできます。
ただし、この言語は、個々の要素を設定する以外に、値を設定する直接的な方法を提供していません。
所属していません StackOverflow