アプリ版:「スタンプのみでお礼する」機能のリリースについて

Linuxのソースを読んでいて分からない箇所があり,投稿させていただきました.
以下のような構造体で

struct vr41xx_giuint_cascade {
unsigned int flag;
int (*get_irq_number)(int irq);
};

2つめの引数はどのような型か分かりません.
よろしくお願いします.

A 回答 (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 ); // * をとってみた→問題なし。
    • good
    • 0
この回答へのお礼

詳細な回答ありがとうございました.
確かにプログラムでは,メンバに代入するときに&を使っていなく役に立ちました.

お礼日時:2006/06/27 10:11

関数ポインタですね。

ご質問の事例は、変数のそれと同様、関数にもアドレスがあります。(*get_irq_number)のことを指しておられると思うのですが、型に関しては、intです。

保持するアドレスにある関数は、関数のポインタ宣言と関数プロンプトの宣言とで、引数や戻り値の型・個数が一致している必要があります。アドレスを保持するだけなので、参照先の関数が別に存在することになるかと思われます。
    • good
    • 0
この回答へのお礼

確かにget_irq_number関数はありました.回答ありがとうございます.

お礼日時:2006/06/27 10:13

get_irq_number は関数へのポインタです。


int 型の引数をひとつ受け取り int 型の値を返す関数へのポインタ
という意味です。
この変数を使って

get_irq_number(int型引数);

のように関数を呼び出すことが出来ます。
    • good
    • 0
この回答へのお礼

関数のポインタだったんですね.素早い回答ありがとございました.

お礼日時:2006/06/27 10:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!