OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

構造体の配列とメンバの配列

  • 暇なときにでも
  • 質問No.164018
  • 閲覧数89
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 55% (163/296)

typedef struct _ex_table1
{
  int  x[10];
  int  y[10];
}ETable1;

ETable1 et1;
int ans1;

for( int a = 0; a < 10; a++ ){
  et1.x[a] = a+10;
  et1.y[a] = a*2;
}
for( int b = 0; b < 10; b++ ){
  if( et1.x[b] == 15 ){
    ans1 = et1.y[b];
    break;
  }
  else{
    ans1 = 0;
  }
}
printf( "%d", ans1 );

/////////////////////////////////
typedef struct _ex_table2
{
  int xx;
  int yy;
}ETable2;

ETable2et2[10];
int ans2;

for( int aa = 0; aa < 10; aa++ ){
  et2[aa].xx = aa+10;
  et2[aa].yy = aa*2;
}
for( int bb = 0; bb < 10; bb++){
  if( et2[bb].xx == 15 ){
    ans2 = et2[bb].yy;
    break;
  }
  else
  {
    ans2 = 0;
  }
}
printf("%d", ans2 );

と言う感じに、微妙にソースを書いてみたのですが、
上のメンバ(x,xx)の値が正しいものがあったら、
対応する下のメンバ(y,yy)を出力したいと思っていますが、
構造体を配列にした場合と、構造体メンバを配列にした場合は
どのように違うのでしょうか?
私には、同じように思えてしまいます。
どなたか、利点・欠点など教えていただけませんか?
よろしくお願い致します。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 24% (612/2465)

どちらでも同じですが、
typedef struct _ex_table1
{
  int  x[10];
  int  y[10];
}ETable1;

ETable1 et1;
だと、x[0]とy[0]の関連がソースを見て判断できません。
それぞれ個別の配列となってしまい配列番号nに入るxとyに関連があるようには見えないのです。
しかし、
typedef struct _ex_table2
{
  int xx;
  int yy;
}ETable2;

ETable2 et2[10];
とすれば、xxとyyに関連が生まれ、配列番号n番目のデータとして識別しやすくなります。

またSUB関数コール時に配列番号nに入っている情報だけを渡したい場合
ETable1では
sub(et1.x[n], et1.y[n]);
int sub(x, y)
{
 :
}
と渡さなければならないですが、
ETable2では
sub(et2[n]);
int sub(ETable2 et)
{
 :
}
で渡せます。

プログラムを作る時に、ひとつの塊としてみたいものをメンバとして並べ、それを必要数だけ用意する。ように作成します。

上記例であれば、xとyは対の情報であると判断できますので、
前者の書き方はよくない書き方で、後者のかきかたはよい書き方となります。
お礼コメント
coolguys

お礼率 55% (163/296)

sub関数を造ったときのことを考えると分かりやすかったです。
値を渡すのがひとつでよくなり、
記述のし忘れが減ってデバックも簡単になりますね。
ありがとうございました。
投稿日時 - 2001-11-07 11:13:31
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 24% (357/1463)

ご質問の二つのプログラムについては、得られる効果は同じだと思います。 どちらが適切かというのは、そのデータが何を示しているかによります。 例えば、5匹のタコの足を扱うプログラムがあったとします。 (変な例えですが、ゲームプログラム等でそんな必要があったと考えて下さい。) 下のどれが適切だと思いますか。(Legは適当に定義された型とします。) (1) typedef struct {  Leg ...続きを読む
ご質問の二つのプログラムについては、得られる効果は同じだと思います。
どちらが適切かというのは、そのデータが何を示しているかによります。
例えば、5匹のタコの足を扱うプログラムがあったとします。
(変な例えですが、ゲームプログラム等でそんな必要があったと考えて下さい。)
下のどれが適切だと思いますか。(Legは適当に定義された型とします。)
(1)
typedef struct {
 Leg leg[8*5];
} Octpus;
Octpus tako;
(2)
typedef struct {
 Leg leg[8];
} Octpus;
Octpus tako[5];
(3)
typedef struct {
 Leg leg;
} Octpus;
Octpus tako[8*5];
(1)や(3)は不自然だと思いませんか?
要はプログラマが見て理解しやすいコードを書けばよいわけです。
お礼コメント
coolguys

お礼率 55% (163/296)

ありがとうございます。
サンプルなどからコピペばっかりしていたために、
基礎部分が分かりませんでした。
結果は同じなのですね。
見易さの問題ですか、なるほど。
投稿日時 - 2001-11-07 11:07:06


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ