構造体配列の全てを同じ値で初期化したい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 構造体配列の全てを同じ値で初期化したい。

Re: 構造体配列の全てを同じ値で初期化したい。

#6

by Math » 4年前

ANSI C 以降 以下のてんで集成体型をまとめて(スカラーのように)扱うことが可能なので積極的に使うべきです。

・構造体の一括代入
・構造体を関数の引数として渡す
・構造体を関数の引数として返す
・auto変数の初期化

初期のCには存在しなかった機能です。

Re: 構造体配列の全てを同じ値で初期化したい。

#5

by かずま » 4年前

ジーラ(初心者) さんが書きました:
4年前
for分で繰り返すというところまでは浮かんでいたのですが、上手く行かず悩んでいたのです。
for分ではなく、for文ですね。

上手く行かないとはどんな状態なのですか。
また、どんなコードを書いてみたのですか?
普通は誰でも次のように書くと思いますが、
もっとうまい書き方があれば知りたかったいということでしょうか?

コード:

	for (int i = 0; i < 1000; i++) {
		strcpy(wordh[i].word, "yyy";
		wordh[i].kaisu = 1;
	}

Re: 構造体配列の全てを同じ値で初期化したい。

#4

by ジーラ(初心者) » 4年前

for分で繰り返すというところまでは浮かんでいたのですが、上手く行かず悩んでいたのです。
一つだけ初期化してコピーという発想はありませんでした。
マクロもそんな使い方があるとは知りませんでした。色々と勉強になりました。
ありがとうございました。

Re: 構造体配列の全てを同じ値で初期化したい。

#3

by かずま » 4年前

マクロを使えば、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: 構造体配列の全てを同じ値で初期化したい。

#2

by かずま » 4年前

先頭 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);
}

構造体配列の全てを同じ値で初期化したい。

#1

by ジーラ(初心者) » 4年前

コード:

typedef struct{
   char word[20];
   int kaisu;
}node;
 node wordh[1000];
上の構造体のwordに『yyy』、kaisuuに『1』を入れたものを1000個用意したいのですが、どうすればよいのか分かりません。
教えてください。

ページトップ