
C++の関数ポインタについて質問です。
下記のように関数ポインタを宣言し、3通りの代入を行ってみました。
(3)のように関数名の頭に&を付けた場合と(2)のように&を付けなかった場合で
全く動きが同じになってしまうのですが、何故なのでしょうか?
------------------------------------------
#include "stdafx.h"
#include <iostream>
using namespace std;
void Func1(){
cout<<"Func1が呼ばれました。"<<endl;
return;
}
int main()
{
//(1)
void (*fp1_1)();
fp1_1 = Func1;
fp1_1();
//(2)
void (*fp1_2)()=Func1;
fp1_2();
//(3)
void (*fp1_3)()=&Func1;
fp1_3();
getchar();
return 0;
}
No.1ベストアンサー
- 回答日時:
一言で言えば Func は &Func に暗黙的に変換されるからです。
より詳しく書くと、関数型は function-to-pointer conversion 規則 (C++規格 [conv.func]) によって、暗黙的に関数ポインタ型に変換されるのです。この変換規則によって、例えば getchar(); を (*****getchar)(); などと書く事すらできてしまいます。 (*&*&*&*&*&getchar)(); に変換される為です。
(寧ろ、どの様な動作の違いを期待されたのでしょうか。)
akinomyogaさん
どういった動きをするのか検証していたところで
思わぬ動きをしたもので悩んでおりました。
大変有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
デバイスハンドルとは?
-
アドレス値はどの型にキャスト...
-
アプリを32bitから64bit移行
-
Excel VBAで絶対アドレスのメモ...
-
セグメントエラー
-
戻り値で構造体を返すことは可...
-
別のDLLのダイアログを・・・
-
リトルエンディアンというもの...
-
NULLと’\\0’のNULL文字は違うも...
-
ReadFileの読み込みエラーについて
-
fopne で失敗する原因
-
メモリのアドレスからの値の取...
-
【C++】関数ポインタの代入
-
ExcelVBAでのkernel32(64bit)
-
C++でクラスのインスタンス化が...
-
型変換について
-
C言語でのconstを返す関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
init関数の意味
-
セグメントエラー
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
ハンドル、アドレス、ポインタ...
-
C言語でのconstを返す関数
-
C++で関数ポインタから関数名を...
-
パスからファイル名を抽出
-
ReadFileの読み込みエラーについて
-
#define NULL ((void *)0) の弊害
-
CImage GetBitsメソッドについて
-
ポインタ変数の疑問
-
Cで作成したDLL関数をVBから呼...
おすすめ情報