【发布时间】:2018-01-29 14:50:47
【问题描述】:
Visual Studio 2015 调试器中的 C++ 代码。平台:Window 10
监视窗口显示:
名称:functionPointer 值:0x012812d0 类型:void(*)(float)
名称:printStuff 值:0x01282440 类型:void(float)
名称:&printStuff 值:0x01282440 类型:void(*)(float)
但是,输出窗口显示:
函数指针 = 012812D0 printStuff = 0x012812D0 &printStuff = 0x012812D0 这是打印功能
#include<iostream>
using namespace std;
void printStuff(float)
{
cout << "This is the print stuff function." << endl;
}
const float PI = 3.1415926f;
int main()
{
void(*functionPointer)(float); // *functionPointer is a pointer
functionPointer = printStuff; // *functionPointer point to function printstuff
cout << "functionPointer = " << functionPointer << " " << "printStuff = " << printStuff << " " << "&printStuff = " << &printStuff << endl;
functionPointer(PI);
return 0;
}
输出
【问题讨论】:
-
请显示文本而不是图像(Visual Studio 允许您从监视窗口复制文本)
-
@P.Zhang 请不要将冗长的信息放入 cmets 但edit您的问题。
-
监视窗口显示: 名称:functionPointer 值:0x012812d0 {jan29.exe!printStuff(float)} 类型:void()(float) 名称:printStuff 值:0x01282440 {jan29.exe !printStuff(float)} 类型:void(float) 名称:&printStuff 值:0x01282440 {jan29.exe!printStuff(float)} 类型:void()(float) 但是,输出窗口显示:“functionPointer = 012812D0 printStuff = 0x012812D0 &printStuff = 0x012812D0 这是打印功能”
-
@MichaelWalz 是的,但是踏入它不会导致您进入
printStuff,而是通过一条jmp指令进入调度表条目,该指令将导致printStuff。 -
@VTT 我做到了这一点,并验证了发布中没有发生这种情况。所以我们得到这种行为似乎很好。但是,为什么它在调试中使用调度表 - Edit&Continue(逻辑怀疑)似乎并非如此。
标签: c++ visual-studio visual-studio-2015