问一个关于函数指针的问题
程序如下:
- C/C++ code
#include <iostream>void Swap(float &x, float &y){ x = x + y; y = x - y; x = x - y;}int main(){ void (*fp)(float &, float &); float a = 3.14, b = 4.5; fp = Swap; /* fp = &Swap; fp = *Swap; */ fp(a,b); std::cout<<"a:"<<a<<"\tb:"<<b<<std::endl; return 0;}小程序,交换变量的值,问题就是注释那一行,为什么用这三种方式,运行的结果都是正确的?
[解决办法]
C/C++左值性精髓(三)左值转换----从函数到指针的转换
[解决办法]
楼上博客中讲的还是收益匪浅,我反汇编了下,确实如此:
- Assembly code
fp = Swap; 00411550 mov dword ptr [fp],offset Swap (411122h) fp = &Swap;00411557 mov dword ptr [fp],offset Swap (411122h) fp = *Swap;0041155E mov dword ptr [fp],offset Swap (411122h)