構造体を宣言できます:
typedef struct
{
int var1;
int var2;
int var3;
} test_t;
次に、これらの構造体構造の配列をデフォルト値で作成します。
test_t theTest[2] =
{
{1,2,3},
{4,5,6}
};
しかし、配列を作成した後、ループなしですべての値を明示的に指定して、1行だけを使用して、上記と同じ方法で値を変更する方法はありますか?
構造体を宣言できます:
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 では複合リテラルが導入されています。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 の記事を読む必要があります。
値をゼロ (または -1) に設定する場合は、次を使用できますmemset
。
memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));
いいえ、この方法でのみ配列を初期化できます。ただし、「1行」メソッドを使用して構造の値を変更できます
変数が別のソースからコピーされている場合は、memcpy などのメソッドを使用して構造体の値を直接上書きできます。
ただし、この言語では、個々の要素を設定する以外に、値を設定する直接的な方法は提供されていません。