- ベストアンサー
構造体のメンバについて
Linuxのソースを読んでいて分からない箇所があり,投稿させていただきました. 以下のような構造体で struct vr41xx_giuint_cascade { unsigned int flag; int (*get_irq_number)(int irq); }; 2つめの引数はどのような型か分かりません. よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
↓こんな型↓の関数を指すポインタです。 int GetIrqNumber( int Irq ) { …… } 関数を指すポインタなので「関数ポインタ」と呼んだりもします。 要するに、構造体のメンバに関数を設定することができるんです。 こんな感じですね。 struct vr41xx_giuint_cascade Hoge; Hoge.get_irq_number = &GetIrqNumber; で、こんな感じで使います。 int IRQ = 90; (*Hoge.get_irq_number)( IRQ ); 【参考】 関数ポインタは、以下のようにアドレス演算子や間接参照演算子を省略することができます。 Hoge.get_irq_number = GetIrqNumber; // & をとってみた→問題なし。 Hoge.get_irq_number( IRQ ); // * をとってみた→問題なし。
その他の回答 (2)
- skbler
- ベストアンサー率9% (69/691)
関数ポインタですね。ご質問の事例は、変数のそれと同様、関数にもアドレスがあります。(*get_irq_number)のことを指しておられると思うのですが、型に関しては、intです。 保持するアドレスにある関数は、関数のポインタ宣言と関数プロンプトの宣言とで、引数や戻り値の型・個数が一致している必要があります。アドレスを保持するだけなので、参照先の関数が別に存在することになるかと思われます。
お礼
確かにget_irq_number関数はありました.回答ありがとうございます.
- peko_pee
- ベストアンサー率53% (45/84)
get_irq_number は関数へのポインタです。 int 型の引数をひとつ受け取り int 型の値を返す関数へのポインタ という意味です。 この変数を使って get_irq_number(int型引数); のように関数を呼び出すことが出来ます。
お礼
関数のポインタだったんですね.素早い回答ありがとございました.
お礼
詳細な回答ありがとうございました. 確かにプログラムでは,メンバに代入するときに&を使っていなく役に立ちました.