概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C 構造体の一括代入
2006年09月19日 (火) | 編集 |
電子レンジを買い換えた。30年間ご苦労様、旧電子レンジ。
しかし俺が生まれる前から今までずっと、使い続けてこれたというのは凄まじい。

しかも消費電力の都合から買い換えたので、別に故障したわけでもない。
というか俺が知る限り故障という現象自体お目にかかったことが無い。

伊達に技術大国と呼ばれていないな、日本。
この品質をどうにかして維持していって欲しいものである。

他人事のように言えた義理でもないが。

そのまんまだな。構造体のデータを一括して別な変数に代入する手法だそうだ。

そのまんまとか言って微妙に字面と効果が違う気もする。

さて、struct m_status型の変数a,bが宣言されており、
また、変数aに各々メンバのデータが格納されているとする。

struct m_status{
 char name[10];
 int str;
 int vit;
 int agi;
} a,b;


a.name="隊長";
a.str=18;
a.vit=15;
a.agi=17;


このとき、

b.name=a.name;
b.str=a.str;
b.vit=a.vit;
b.agi=a.agi;


とするとそれぞれのaの値をbに代入出来るんだが、そんなことしなくても

b=a;

これだけで簡単にaの全データをbに代入出来るそうな。なんやねん。
こんなんあるなら最初からそれだけ言えやって気もするが、古い仕様のCでは出来なかったそうなのでこれはこれで仕方が無いのだろう。

んじゃま実際にやってみよう。
前回の構造体配列を、別の構造体配列にコピーして表示してみる。

void main(void)
{
 int i;
 struct m_status{
  char name[10];
  int str;
  int vit;
  int agi;
}


 static struct m_status a[]={
  {"隊長",18,15,17},
  {"桐崎",19,18,18},
  {"アリシア",18,19,18},
  {"栃木",18,18,18},
  {"ティー",14,12,24},
  {"ウェル",17,19,18}};


ここまでは前回と同じ。今回はbに代入するので、

 struct m_status b[6];

 for(i=0;i<6;i++)
  b[i]=a[i];


構造体配列bを宣言し、ループ文で構造体配列aの内容をコピーする。

 printf(" Name STR VIT AGI\n");
 for(i=0;i<6;i++)
  printf("%10s %3d %3d %3d\n",b[i].name,b[i].str,b[i].vit,b[i].agi);


んで表示。

struct_copy_test.jpgstruct_copy_test2.jpg
こんな感じ

何に使うんだコレとか思うが、ソートなんかには使えるらしい。
例えばHPの大きい順に並べる場合は以下のようになる。

void main(void)
{
 int i,j,k,max;
 struct m_status{
  char name[10];
  int hp;
};


 static struct m_status a[]={
  {"隊長",936},
  {"桐崎",1005},
  {"アリシア",1407},
  {"栃木",954},
  {"ティー",585},
  {"ウェル",1214}};

 struct m_status b;

 for(i=0;i<6;i++){
  max=a[i].hp;
  k=i;
  for(j=i+i;j<6;j++){
   if (a[j].hp>max){
   max=a[j].hp;
   k=j;
   }
  }

 dumy=a[i];a[i]=a[k];a[k]=dumy;
 }

 printf(" Name STR VIT AGI\n");
 for(i=0;i<6;i++)
  printf("%10s %3d\n",a[i].name,a[i].hp);


struct_copy_test3.jpgstruct_copy_test4.jpg
存外手間取ったがどうにか


まとめよう。

構造体だろうが配列や変数であるならワンタッチでコピー出来ます
本来なら数行かかる記述が驚きの一行! この一行は御徳です!

構造体宣言の;を忘れると「宣言に型が多すぎる」と怒られた
ソートのアルゴリズム度忘れしていた

「思い出さなくても以下略」

アスリエル―――!



そういや最近この人原画のゲーム見ないな。
構造体のコピーは便利ってよか一部の処理に使っているといった感じかね。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。