这条语句出自第三章的Frame6范例程序->RuntimeClass的构造过程中
struct CRuntimeClass
{
// Attributes
   LPCSTR m_lpszClassName;
   int m_nObjectSize;
   UINT m_wSchema; // schema number of the loaded class
   CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
/*就是上边这句,这条语句好像是C++本身脱离VC环境就能成立的,我只知道有了这句话,
  RuntimeClass结构就多了一个成员,这个成员是一个函数的指针。可是通过语法怎么也看不
  出个所以然来,如果再跟CObject* CreateObject();这一句对比就更糊涂了,区别就只在一个
  括号,可一个是一个函数的指针,一个却是一个函数。请哪位给指点指点。   CRuntimeClass* m_pBaseClass;   CObject* CreateObject();
   static CRuntimeClass* PASCAL Load();   // CRuntimeClass objects linked together in simple list
   static CRuntimeClass* pFirstClass; // start of class list
   CRuntimeClass* m_pNextClass;    // linked list of registered classes
};

解决方案 »

  1.   

    函数指针是什么?
    先看例子:
    //
    #include int max(int x,int y){ return(x>y?x:y); } void main() 

        int (*ptr)(); 
        int a,b,c; 
        ptr=max; //注意这行
        scanf("%d,%d",&a,&b); 
        c=(*ptr)(a,b); 
        printf("a=%d,b=%d,max=%d",a,b,c); 

    //
    那函数怎么可以赋值给函数指针?难道int可以赋值给int* ?
    //
    函数指针里面放的什么?函数入口地址。
    那么函数指针就是放函数入口地址的变量?
    而函数是什么?显而易见,是放函数入口地址的常量。
    这样一来就好解释了!函数赋值给函数指针就像把常量赋值给同类型变量!
    //
    再看看下面的代码:
    //////////////////////////////////
    #include 
    typedef int (*FN_HAHA)();
    int real_haha()
    {
     return printf("haha\n");
    }void main(int argc, char* argv[])
    {
     FN_HAHA haha=real_haha;
     real_haha();
     (*haha)(); 
    }
    //////////////////////////////////
    既然  haha 和 real_haha是一个层次上的东西,
    那么调用的时候为什么 一个 "real_haha();",
    一个(*haha)()哩?
    //////
    这是语法本身的缺陷,所以现在的编译器,比如VC和gcc,
    都允许用 haha();来代替传统的(*haha)();你44就知道了。
    /////////////////////////////////////////
    可见,函数指针与函数其实是一回事情.都是一段代码(函数体)的入口地址.