• 締切済み

typedefの使い方について(C言語の文法)

あるサンプルプログラムを見ていたら、typedefの部分が良く理解できずに悩んでいます。 1.「Test, *PTest」のように、カンマで区切って書いてある場合、どういうことを意味しますか? typedef struct Test {  //構造体メンバ } Test, *PTest; 2.WrDataBuf型の、*PWrDataBufというポインタは、どのような(どこを指す)ポインタなのでしょうか? typedef BYTE WrDataBuf[10]; typedef WrDataBuf *PWrDataBuf; よろしくお願いします。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

typedef struct Test {  //構造体メンバ } Test; typedef struct Test {  //構造体メンバ } *PTest; と書くのを一つにまとめただけなんですけど…。

MaKanazawa
質問者

お礼

asuncionさん、ありがとうございます。 そういう意味だったんですね。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.1

1. Test x; と書くと、struct Test x; と書いたのと同じ。 PTest y; と書くと、struct Test *y; と書いたのと同じ。 2. PWrDataBuf はポインタではなく、ポインタの型です。 PWrDataBuf z; と書くと、z はBYTE型10個の配列を指すポインタになります。 (*z)[0]、(*z)[1]、・・・・、(*z)[9] まで10個のバイト値。 もちろんポインタなので、 WrDataBuf a; PWrDataBuf z; z = &a; のように何らかのアドレスを代入しないとだめですが。

MaKanazawa
質問者

補足

notnotさん、ありがとうございます。 済みません。1番のほうが、ちょっとよくわからないのですが、「 }Test, *PTest; 」という具合にカンマで区切っているのはどう理解したらよいですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【C++】typedefの役割について

    C++だけでなく、Cでも同様なのだと思うのですが、下記の(1)、(2)の違い がよくわからず、どなたかにご教授いただければと思っています。 (1) struct{   (略) }BBB; (2) typedef struct{   (略) }BBB; (2)が下記((2)')のようになるんであれば、AAAという名前の構造体を BBBという名前で定義しているという事で理解できるんですが、 (2)のようにしている意図が理解できません。 (typedefの記述は必要なんでしょうか?) すでに動いているシステムなので、問題ないのは明らかなんですが。 (2)' typedef struct AAA{   (略) }BBB;

  • C言語 自己参照型 複数木構造

    C言語の自己参照型を使用しプログラムを作ろうとしていますが、 2分探索木についての解説、サンプルをのせているサイトは たくさんあり勉強になったのですが、 木が2以上の複数の場合になった場合、どういったプログラムをくめば いいのかわからず、学習したいと思っています。 参考となる、サイト、サンプルを教えていただけないでしょうか? //2分木の場合 struct node{ int nodeID; struct node *nextA; struct node *nextB; } //複数木の場合? struct node{ int nodeID; struct node **next; } のように複数木の場合は、次の木が複数に対応できるように ポインタのポインタを使用するのかと思いますが、 構造体のメンバでポインタのポインタの使用の仕方が いまいち理解できませんでした。 よろしくお願い致します。

  • C言語 ダブルポインタを引数にもつAPI

    GetBuf ( char ** address, size_t *dataSize ); 第1引数: バッファの先頭アドレスをかえす 第2引数: バッファサイズをByte単位で返す 戻り値 1:成功      -1 取得失敗 typedef struct Test_t{ char* tempAddr; /* 先頭アドレスを格納 */ int bufSize; /* サイズを格納 */ } test_t 上記のAPIから情報を取得し、以下の構造体にデータを保持しようとしていますが GetBuffのダブルポインタの情報を構造体のメンバtempAddrに格納するにはどうしたらよいでしょうか このAPIのように引数でダブルポインタを使用するケースは一般的なのでしょうか? 教えていただけるとうれしいです。 よろしくお願い致します。

  • typedefについてご質問お願いします。

    struct listNode { char data; struct lostNode *nextPtr; }; typedef struct listNode LISTNODE; typedef LISTNODE *LISTNODEPTR; main() { LISTNODEPTR startPtr = NULL; 質問1 上記プログラム中のtypedef LISTNODE *LISTNODEPTRの意味が分からないのですが、これは何を何にtypedefしてるのでしょうか? 質問2 この記述ではNULLポインタはstartPtrがさす値をNULLにするのかstartPtrの値をNULLにするのかを教えていただきたいと思います。 初心者のため的外れな質問かもしれませんがよろしくお願いします。

  • typedefをプログラム中で解除するには?

    C言語において、 typedefした後に そのtypedefをプログラム中で解除するにはどうしたらいいでしょうか? typedef struct _test test [] test ←typedef解除

  • typedef struct Opaque~ ~;の Opaqueとはなんですか?

    宜しければ教えていただきたい事があるのですが アップルのフレームワークで提供している構造体の要素を確認したく辿って行くとよく typedef struct Opaque~ ~;のような記述に行き当たり、そこまでしか辿れないのですが、 これは文字の意味のとおりで非公開という事なのでしょうか? 例 typedef struct OpaqueAudioFileID *AudioFileID; お願いいたします。

  • [C言語]ソート関数の作成

    現在受け取った構造体を受け取ってソートしてポインタで書き換える関数を作成しています。 構造体の配列 typedef struct{ char name[50]; int age; }member; member seito[10] strcpy(seito[0].name,"yamada") seito[0].age = 15; strcpy(seito[2].name,"ito") seito[2].age = 17; strcpy(seito[3].name,"saito") seito[3].age = 19; こちらの構造体は例です。 seito[2]の情報を[1]に seito[3]の情報を[2]に移動させたいのですが、上手くいきません。 構造体配列を、1引いてあげれば良いと思ったのですが、そうすると[0]までマイナスしてしまい上手く判定が出来ません。 どうかアドバイスお願いいたします。

  • .NET C++で、構造体の配列をnewで作成しようとするとerror C2440のエラーとなってしまいます

    Visual studio2003 .NET C++で、構造体の配列を作成し、 改めて構造体の配列をサイズ指定して作成しようとすると、error C2440が出てしまいます。 ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、 なぜこのようなエラーが出るのかわからずにおります。 typedef __nogc struct TEST { // 省略 }; TEST struct_test __nogc[]; int int_num = 10; struct_test = new TEST __nogc[int_num]; // error C2440: '=' : 'TEST *' から 'TEST []' に変換できません。 ご指摘等ありましたらご回答いただけますと助かります。 よろしくお願いいたします。

  • C言語のtypedefの質問

    Cビギナーです。 私のプログラムが長くなるのは、 ファイルの分割をしてないからだと知った今日この頃なのですが、 それを勉強するためにあるホームページを見ていたのですが、 次のようなサンプルプログラムがありました。 /* main.c */ #include <stdio.h> extern int func(int); typedef int (*pf)(int); extern pf getaddress(void); int main(void) { printf("%d\n",(getaddress())(4)); return 0; } /* sub.c */ static int func(int c) { return c*10; } typedef int (*pf)(int); pf getaddress(void) { return func; } ここで、typedef int (*pf)(int);の部分が分かりません。 intを(*pf)(int)で置き換えているのでしょうが、 それ自体がどういう意味か分かりません… どなたか教えて下さい。

  • マイコンのプログラム(C言語)について

    マイコンのサンプルプログラムの中に以下のような記述がありました。 ヘッダーファイル内 struct st_hudi { union { unsigned short WORD; struct { unsigned short TI:8; } BIT; }SDIR; }; #define HUDI (*(volatile struct st_hudi *)0xFFFE2000) そして、この構造体の使い方は HUDI.SDIR.WORD = 0; と、いった感じです。 通常は、構造体の宣言(struct st_hudi aなど)を行わないと使えないと思うのですが、以上のプログラムでエラーは出ません。 1.上記のような場合は、構造体の宣言はいらないのでしょうか? 現在は、#defineの部分でアドレスを指定してあるため、構造体の宣言はいらない、という認識を持っています。 2.volatileがなくても動きそうなのですが、これは必要なのでしょうか? アドレスを明記しているため、volatileがなくても正常に動きそうな気がします。 回答よろしくお願いします。

このQ&Aのポイント
  • インクカートリッジを交換しても、キヤノン製品のインク残量表示が正しく表示されない問題があります。
  • インクカートリッジを交換した後も、プリンターの画面にはインク残量が充分にあると表示される場合があります。
  • この問題は、キヤノン製品の一部のモデルで報告されており、ファームウェアのバージョンによって異なる場合があります。
回答を見る