指针分配的功能地址显示与功能地址不同的值

use*_*430 2 c++

我有一个功能,比方说

void myfunc()
Run Code Online (Sandbox Code Playgroud)

如果我声明一个指针并将其分配给函数的地址,如下所示

void *test_pointer = (void*) &myfunc;
Run Code Online (Sandbox Code Playgroud)

并使用Visual Studio进入调试模式,我将从监视窗口获取以下内容

Name                       Value
&myfunc                    0x000000013fc06570
test_pointer               0x000000013fa4786f
Run Code Online (Sandbox Code Playgroud)

现在我希望这两个值是相同的,为什么不是这样呢?

Sto*_*ica 8

严格地说,C++标准不需要实现来支持将函数指针转换为不透明对象指针(void*).你可能被告知void*可以指出任何东西,但"任何东西"不一定是功能.

由于此功能仅受条件支持,因此无法确定如何进行此类转换.可能是您的实现只会void*在保留值的同时进行转换(这是标准所要求的最低要求).但是两个指针表示中的值不必相同.

引用最新的C++标准草案,[expr.reinterpret.cast]/8:

有条件地支持将函数指针转换为对象指针类型(反之亦然).这种转换的含义是实现定义的,除非实现支持两个方向的转换,将一种类型的prvalue转换为另一种类型并返回,可能具有不同的cv-qualification,将产生原始指针值.