ページ 11

関数ポインタのポインタについて

Posted: 2010年9月01日(水) 17:28
by ナイ
質問よろしいでしょうか?
C++にて関数ポインタのアドレスを更にアドレスにいれたいのですが(つまり関数のポインタのポインタです)
その場合に

void (* MOTO )(void);//すでに関数のアドレスが入っていると思ってください
void (** SAKI )(void);
SAKI = &MOTO;
とポインタの代入のようにするのか

void (* MOTO )(void);//すでに関数のアドレスが入っていると思ってください
void (* SAKI )(void);
(* SAKI ) = MOTO;
のように関数ポインタのようにやればいいのでしょうか?

わかりにくい書き方で申し訳ないですが、教えていただけないでしょうか?

Re:関数ポインタのポインタについて

Posted: 2010年9月01日(水) 17:44
by アビゲイル
int a;
int *b =&a;
int **c = &b:

int a;
int *b = &a;
int *c = b;

質問の内容は上記と同じですね。
関数のポインタのポインタという言葉の響きは前者ですが、実際どのように扱いたいのでしょうか?
その場合にもよりますが、可能なら後者がいいのではないでしょうか。
#質問の意図を汲んで文言を修正しました 画像

Re:関数ポインタのポインタについて

Posted: 2010年9月01日(水) 17:52
by たかぎ
後者はあり得ません。

> void (* MOTO )(void);//すでに関数のアドレスが入っていると思ってください
> void (* SAKI )(void);
> (* SAKI ) = MOTO;

(* SAKI )は関数型ですので、代入できるはずがありませんね。

Re:関数ポインタのポインタについて

Posted: 2010年9月01日(水) 17:57
by アビゲイル
なるほど
SAKI =MOTO;になってませんねw

Re:関数ポインタのポインタについて

Posted: 2010年9月01日(水) 18:03
by ナイ
あぁすみません
(* SAKI ) = MOTO;

SAKI = MOTO;です

Re:関数ポインタのポインタについて

Posted: 2010年9月01日(水) 20:45
by gyz
ポインタの指してる先を矢印で表現すると
前者は
SAKI → MOTO → 関数A

後者は
SAKI → 関数A
MOTO → 関数A
  
ってことですよね?

後者は「関数ポインタのポインタ」を保持してるわけではなく
MOTOと同じ関数ポインタをSAKIも持つようにしてるだけなので
「関数ポインタのポインタ」を使用する必要があるなら
前者が適当だと思います。

Re:関数ポインタのポインタについて

Posted: 2010年9月02日(木) 09:09
by ナイ
なるほど

よくわかりました。
お答えいただいてありがとうございます。
また何かありましたときには、よろしくお願いいたします。 画像