fun =(void (*)(A*)) ptr 与memcpy(&fun,reinterpret_cast(ptr),4)的区别?该怎么处理

fun =(void (*)(A*)) ptr 与memcpy(&fun,reinterpret_cast<long*>(ptr),4)的区别?
class A{public:virtual void function(){}};
void (*fun)(A*)

然后请问:
memcpy(&fun,reinterpret_cast<long*>(ptr),4);

fun =(void (*)(A*)) ptr;
有啥区别吗?

ps:都能通过编译,第二个运行会出现未处理异常。

谢谢

------解决方案--------------------
你第2个没有将ptr所包含的地址里面4个字节拷贝到fun,而是说将ptr这个变量直接转型为函数指针当然不同。