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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ナイ

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

#1

投稿記事 by ナイ » 15年前

質問よろしいでしょうか?
C++にて関数ポインタのアドレスを更にアドレスにいれたいのですが(つまり関数のポインタのポインタです)
その場合に

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

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

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

アビゲイル

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

#2

投稿記事 by アビゲイル » 15年前

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

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

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

たかぎ

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

#3

投稿記事 by たかぎ » 15年前

後者はあり得ません。

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

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

アビゲイル

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

#4

投稿記事 by アビゲイル » 15年前

なるほど
SAKI =MOTO;になってませんねw

ナイ

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

#5

投稿記事 by ナイ » 15年前

あぁすみません
(* SAKI ) = MOTO;

SAKI = MOTO;です

gyz

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

#6

投稿記事 by gyz » 15年前

ポインタの指してる先を矢印で表現すると
前者は
SAKI → MOTO → 関数A

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

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

ナイ

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

#7

投稿記事 by ナイ » 15年前

なるほど

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

閉鎖

“C言語何でも質問掲示板” へ戻る