- 締切済み
構造体の使い方
構造体の基本的な使い方を練習しようと思ったのですが、 なかなかスムーズにいきません。 p.d=10; の部分がおかしいようなのですが、色々試してもコンパイルできませんでした。 正しい使い方を教えていただけないでしょうか ソース ↓ #include<stdio.h> struct type{ int a; float b; double c; }var,*p; main(){ c=9.87; p=&var; p.d=10; p->b=1.2; printf("int:%d\n",*p); printf("float:%.1f\n",&p); printf("double:%.3lf\n",c); return 0; }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
順番に挙げていきますと、 (1)変数cの型なし。 例) float c = 9.87; (2)p.d pは構造体のポインタですので、p->d=10; としないとエラーです。 (3)printf("int:%d\n",*p); *pということは構造体ですが、構造体を%dフォーマットで受け取ることは できません。 例)printf("int:%d\n",p->a); (4)printf("float:%.1f\n",&p); &pということは、構造体のポインタのポインタになります。 これはどのような意図で記述しているのですか? ざっと挙げると以上の通りです。 No.3さんのおっしゃるとおり、C言語の本を一冊手元に置いて 基本的な部分から取り組むべきだと思います。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★ちゃんとしたテキストは持っていますか? >構造体の基本的な使い方を練習しようと思ったのですが、 >なかなかスムーズにいきません。 ↑ 構造体の基本的な使い方が解説されている本を1冊用意するか、本屋でさらっと見て 確認してみた方が良いでしょう。構造体は複数の変数をまとめて管理するだけなので そんなに難しくはありません。 >色々試してもコンパイルできませんでした。 ↑ 『struct type』構造体の『d』メンバがありません。 また main() 関数で『c』変数が宣言されていません。 あと『p.d』ではなく『p->d』か、『(*p).d』とします。 3つ正しくなかったのでコンパイルできないのです。 >正しい使い方を教えていただけないでしょうか ↑ C言語の本、持っていないのかな? 持っていれば『構造体』は定番のはず。載っていると思いますけど。 (問題集ではなく堅苦しい解説書などです) 次のリンク先 http://homepage3.nifty.com/mmgames/c_guide/index.html→『苦しんで覚えるC言語』 にある http://homepage3.nifty.com/mmgames/c_guide/16-01.html→『異なる型の変数をまとめる』 http://homepage3.nifty.com/mmgames/c_guide/16-02.html→『構造体の引数』 http://homepage3.nifty.com/mmgames/c_guide/16-03.html→『構造体の配列』 http://homepage3.nifty.com/mmgames/c_guide/16-q.html→『練習問題16』 を参照して下さい。 基本: ・構造体のメンバは普通は『.』演算子でアクセスします。 でも構造体のポインタは『->』演算子でもアクセスできます。 つまり、 struct type { int a; float b; double c; } var, *p; // 普通は『.』演算子で printf( "a=%d\n", var.a ); printf( "b=%f\n", var.b ); printf( "c=%f\n", var.c ); // ポインタは『->』演算子で p = &var; printf( "a=%d\n", p->a ); printf( "b=%f\n", p->b ); printf( "c=%f\n", p->c ); // ポインタで『.』演算子を使うなら p = &var; printf( "a=%d\n", (*p).a ); printf( "b=%f\n", (*p).b ); printf( "c=%f\n", (*p).c ); とします。 配列: ・例えば struct type data[ 100 ]; を宣言すると for ( i = 0 ; i < 100 ; i++ ){ printf( "a=%d\n", data[i].a ); printf( "b=%f\n", data[i].b ); printf( "c=%f\n", data[i].c ); printf( "\n" ); } とします。 ・ポインタの場合は struct type *p = data; for ( i = 0 ; i < 100 ; i++, p++ ){ ←ポインタ(p)++ printf( "a=%d\n", p->a ); printf( "b=%f\n", p->b ); printf( "c=%f\n", p->c ); printf( "\n" ); } とします。 ・以上。
- Tacosan
- ベストアンサー率23% (3656/15482)
ついでにいえば, ポインタに対して「.」演算子は使えないわなぁ.
- dsuekichi
- ベストアンサー率64% (171/265)
> p.d=10; > の部分がおかしいようなのですが、 提示された構造体に「d」の定義はありませんけど・・・ #a,b,cしか定義していない・・・ 投稿ミスですか?
お礼
ありがとうございました。 C言語のサイトを見て回るだけだったんですが、本もちゃんと用意しようと思います。