次のコードがあります。
typedef struct
{
int a;
float b;
int c;
} Hello;
Hello hello[100];
この配列の最初の要素に値を代入できることはわかっています。
hello[0] = {1,2.0,3};
しかし、宣言時に最初の要素を割り当てる方法hello: Hello hello[100];
次のコードがあります。
typedef struct
{
int a;
float b;
int c;
} Hello;
Hello hello[100];
この配列の最初の要素に値を代入できることはわかっています。
hello[0] = {1,2.0,3};
しかし、宣言時に最初の要素を割り当てる方法hello: Hello hello[100];
次のスニペットを使用します。
Hello hello[100] = {{1, 2.0, 3}};
外側の中かっこは配列を初期化しますが、これらの中かっこには要素 (最初の配列要素) しかありません。その結果、hello[0] を外側の中かっこ内の値で初期化します。
コンパイラがc99機能をサポートしている場合、 Designated Initializersを使用して配列の任意の要素を初期化できます。
Hello hello[100] = {[0] = {1,2.0,3}}, [98] = {2,3.5,4} };
これにより、 0 番目の要素が に{1,2.0,3}
、98 番目の要素{2,3.5,4}
が に初期化されます。その他は{0,0.0,0}
それ自体に初期化されます。この方法のもう 1 つの利点は、要素がリストされる順序が重要でなくなることです。つまり、上記の配列を次のように初期化できます。
Hello hello[100] = {[98] = {2,3.5,4}, [0] = {1,2.0,3} };