• ベストアンサー

構造体について

64bitの回答

  • 64bit
  • ベストアンサー率51% (45/88)
回答No.2

回答ではありませんが、 struct abc{ int s; struct abc xx; struct abc yy; }; これは間違っています。 struct abc型の定義の中でstruct abc型の変数を宣言してはいけません。 セミコロンの前の時点では struct abc は不完全型で、ポインタを宣言することしかできません。 そもそも、こんな構造体があったらサイズが無限になって大変です。

関連するQ&A

  • 構造体について

    凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。

  • C#で構造体の配列を持った構造体を使いたいのですが

    C#で構造体の配列を持った構造体を使いたいのですが Cならば struct xyz { struct abc _abc[32]; int index; }; struct abc { int a; int b; int c; }; struct xyz _xyz[8]; xyz[0]._abc[3].b = 1; のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません うまくやる方法をどなたかご存知ないでしょうか Visual Studio 2005行った場合 コンパイルで 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します となり fixed をつけると 固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double となってしまいます

  • 動的配列の構造体の受け渡しについて

    動的配列の構造体の受け渡しについて教えていただきたいです。 typedef struct{ int class; int **matrix; }pattern_struct; という構造体を用意しました。 メイン側で int main(){ pattern_struct *sample,*prototype; 省略 for(k=0;k<9;i++){ for(i=0;i<height;i++){ for(j=0;j<width;j++){ prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j]; } } for(i=0;i<height;i++){ for(j=0;j<width;j++){ prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j]; } }     ~9まで続きます~ } 省略 } 少し変えていますが、このようなプログラムを記述しました。 記述を省略するためにmallocで作成した構造体配列の足し算をする関数を作りたいのですが、どのように記述するべきなのでしょうか。

  • 構造体のメンバをfor文で回したい

    次のようなソースで typedef struct test{ int a; int b; int c; }TEST; TEST xx; xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; printf("%d %d %d\n",xx.a,xx.b,xx.c); のようなことをしたいんですが、 xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; の処理の部分をfor文で回せるようにしたいです。 構造体の宣言のところで配列をつかって struct test{ int abc[3]; } とすれば簡単にいくのは分かるんですが、a,b,cそれぞれに分かりやすい名前をつけたいので、配列で確保したくないです。 何かいい方法はないでしょうか? 実際計算に使うんですが、メンバはすべてdouble型で30個程度になると思います。

  • 構造体について

    以下のような構造体の宣言が合ったとき struct list { int a; char b[20]; struct list *next; }; struct list *add_list( int a, char *str, struct list *head );・・・1 struct list *del_list( int a, struct list *head );・・・2 1は引数の数が同じため問題ないのですが、2はどういう意味になるのでしょう?

  • 構造体のポインタ参照

    構造体のプログラムを作成しており、コンパイルを行った際にエラーが起きてしまいました。 以下に構造体宣言とメイン関数のプログラムをとエラーが出てしまった部分を記述します。 エラー表示の内容として「不完全型ポインタへの間接参照」と出ました。 自分なりに考えた結果、ポインタの参照部分に間違いがあるためエラーが起こったと思います。そのエラーが生じた部分のプログラムをどのように修正すればコンパイルが成功するか、ご教授のほうお願いします。 /* 構造体宣言 */ typedef struct { int m; double *a; double *alpha; }PREDICTOR; int main(){ struct PREDICTOR *pred; int i; /* ここでエラーが起きました */ pred -> a[0] = pred -> a[1] =0; pred -> m = 0; pred -> alpha = r(0);  /* ここまで */ for(i = 0; i < M; i++){ pred = levin(pred); } return 0; }

  • 構造体の静的な初期化

    構造体の静的な初期化で、初期化が書かれていないメンバーは、 どうなるのでしょうか。。? たとえば・・・ // 構造体の宣言 strcut MY_STRUCT {    int data1 ;    int data2 ;    int data3 ;    int data4 ; } ; // 変数宣言&初期化 static strcut MY_STRUCT st = {    .data1 = 100,    .data3 = 300 } ; ネットで調べると、 初期化で指示されていないメンバーは0に初期化される、 という記述も一つだけ見つけたのですが・・・これはC言語(C99)の仕様でしょうか? それともコンパイラ依存の仕様でしょうか?

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

    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; ETable2 et2[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)を出力したいと思っていますが、 構造体を配列にした場合と、構造体メンバを配列にした場合は どのように違うのでしょうか? 私には、同じように思えてしまいます。 どなたか、利点・欠点など教えていただけませんか? よろしくお願い致します。

  • 構造体について

    5件のデータをRECORDに追加したいのですが、 RECORD inputdata(void)の宣言文エラーなどのコンパイルエラー。それと、inputdataを用いてどうやって5件のデータを入れたらいいかがわかりません。教えてください。 #define SIZE 5 #include <stdio.h> typedef struct{ int yy; int mm; int dd; }YMD; typedef struct{ char name[20]; YMD birthday; int age; }RECORD; RECORD inputdata(void); void main(void) { int i; for(i = 0;i < SIZE;i++){ inputdata(); } RECORD inputdata(void) { RECORD person; printf("名前>"); scanf("%s", person.name); printf("誕生日入力\n"); printf("年>"); scanf("%d", person.birthday.yy); printf("月>"); scanf("%d", person.birthday.mm); printf("日>"); scanf("%d", person.birthday.dd); return person; }

  • C言語構造体についてです。

    C言語、π=PI 3.14159265で構造体を用いてmensekiを呼び出して 半径と面積を計算して出力するプログラムです。下の空白を埋めてもらえますか? /* 構造体のプログラム */ #include <stdio.h> #include <math.h> #define PI 3.14159265 struct Data { /* 半径rと面積areaをdoubleで宣言 */ }; void menseki(struct ... 構造体のポインタを引数とする ){ /* 面積を計算する際に構造体のアドレスから計算する */ circle->area=PI* .....; } main(){ struct Data example[2]; //構造体配列 int i; /* 半径rを構造体配列を用いて2例入力する */ /* 2例の各々について mensekiを呼び出して 半径と面積を計算して出力する */ } よろしくお願いします。