構造体の決まり文句


Cで一番わからないのは構造体です。僕も3年間以上理解できず寂しい思い をしてました。他人の書いたソースを読んでるうちに構造体には入門書には書いてない決まりきった構文があることに気付いて使えるようになりました。

(構造体の定義)
構造体の定義は次のようにします。
----(kouzoutai.h)----
typedef struct st_kouzoutai {
    int guha;
    str *strdayo;
.....
} KOUZOUTAI, *LPKOUZOUTAI;
---- ----
いきなりst_kouzoutaiとKOUZOUTAIを定義してしまうのがミソです。何も考えずにこうします。
構造型には大文字の名前をつかいます。
(LPKOUZOUTAIを定義するのはマイクロソフト流です。僕は定義しません。)

(構造体の使用)
-----(main.c)----
#include <kouzoutai.h>
void kansuu (KOUZOUTAI *);
....
int main(void){
    KOUZOUTAI kouzoutai;
    int hoho;
    .....
    hoho = kouzoutai.guha;
    kansuu(&kouzutai);
    .....
    return 0;
}
void kansuu( KOUZOUTAI* ptr_kouzoutai){
    .....
    hoho = ptr_kouzoutai->guha;
    .....
    return;
}
構造体が定義された部分では"."でメンバを参照して、ポインタを渡された部分では”->”でメンバを参照します。
(KOUZOUTAI *ptr_kouzoutaiは  マイクロソフト流にLPKOUZOUTAI ptr_kouzoutaiともかけますが これはどっちでもいいでしょう)

(解説)
入門書には、 
struct st_kouzoutai  kouzoutai;

struct { .....   } kouzoutai;
みたいにtypedefを使わない構文も出てきますが、こんな醜いコード使う人はいません。
(構造体の構造を書いた部分がヘッダファイルではなくてプログラム本体にあるなんてナンセンスですよね)
実際に使われるのはこの方法だけですさくっと覚えちゃいましょう。

このHPの内容に問題があればsけいし (skeishi@yahoo.co.jp)まで連絡ください。
DevCPPの使い方に戻る
sけいし発HPに戻る
inserted by FC2 system