上の構造体のwordに『yyy』、kaisuuに『1』を入れたものを1000個用意したいのですが、どうすればよいのか分かりません。
教えてください。
構造体配列の全てを同じ値で初期化したい。
Re: 構造体配列の全てを同じ値で初期化したい。
先頭 1個だけ初期化して、それをコピーすればよいのでは?
#include <stdio.h>
typedef struct {
char word[20];
int kaisu;
} node;
node wordh[1000] = { { "yyy", 1 } };
void init_wordh(void)
{
for (int i = 1; i < 1000; i++) wordh[i] = wordh[0];
}
int main(void)
{
init_wordh();
printf("wordh[0] = { %s, %d }\n", wordh[0].word, wordh[0].kaisu);
printf("wordh[999] = { %s, %d }\n", wordh[999].word, wordh[999].kaisu);
}
Re: 構造体配列の全てを同じ値で初期化したい。
マクロを使えば、1000個の初期値を数行で書けますよ。
#include <stdio.h>
typedef struct {
char word[20];
int kaisu;
} node;
#define T2 { "yyy", 1 }
#define T1 T2,T2,T2,T2,T2,T2,T2,T2,T2,T2
#define T T1,T1,T1,T1,T1,T1,T1,T1,T1,T1
node wordh[1000] = { T, T, T, T, T, T, T, T, T, T };
int main(void)
{
printf("wordh[0] = { %s, %d }\n", wordh[0].word, wordh[0].kaisu);
printf("wordh[999] = { %s, %d }\n", wordh[999].word, wordh[999].kaisu);
}
Re: 構造体配列の全てを同じ値で初期化したい。
for分で繰り返すというところまでは浮かんでいたのですが、上手く行かず悩んでいたのです。
一つだけ初期化してコピーという発想はありませんでした。
マクロもそんな使い方があるとは知りませんでした。色々と勉強になりました。
ありがとうございました。
一つだけ初期化してコピーという発想はありませんでした。
マクロもそんな使い方があるとは知りませんでした。色々と勉強になりました。
ありがとうございました。
Re: 構造体配列の全てを同じ値で初期化したい。
for分ではなく、for文ですね。ジーラ(初心者) さんが書きました: ↑6年前for分で繰り返すというところまでは浮かんでいたのですが、上手く行かず悩んでいたのです。
上手く行かないとはどんな状態なのですか。
また、どんなコードを書いてみたのですか?
普通は誰でも次のように書くと思いますが、
もっとうまい書き方があれば知りたかったいということでしょうか?
Re: 構造体配列の全てを同じ値で初期化したい。
ANSI C 以降 以下のてんで集成体型をまとめて(スカラーのように)扱うことが可能なので積極的に使うべきです。
・構造体の一括代入
・構造体を関数の引数として渡す
・構造体を関数の引数として返す
・auto変数の初期化
初期のCには存在しなかった機能です。
・構造体の一括代入
・構造体を関数の引数として渡す
・構造体を関数の引数として返す
・auto変数の初期化
初期のCには存在しなかった機能です。