none
typedef问题 RRS feed

  • 问题

  • typedef LRESULT (CALLBACK* WNDPROC)(HWND,UINT,WPARAM,LPARAM);我查资料说是定义一个别名,实在是搞不明白了,谁能帮我解释下这句话的意思?
    2010年5月31日 0:59

答案

  • 首先你要知道什么是函数指针。

    上面这句是定义一个函数指针的原型。

    WNDPROC 是一个指向返回值是LRESULT。有四个参数,HWND,UINT,WPARAM,LPARAM的函数


    麻烦把正确答案设为解答。
    2010年5月31日 2:49
    版主

全部回复

  • 为一个函数指针类型起别名而已……

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年5月31日 1:52
    版主
  • 首先你要知道什么是函数指针。

    上面这句是定义一个函数指针的原型。

    WNDPROC 是一个指向返回值是LRESULT。有四个参数,HWND,UINT,WPARAM,LPARAM的函数


    麻烦把正确答案设为解答。
    2010年5月31日 2:49
    版主
  • typedef LRESULT (CALLBACK* WNDPROC)(HWND,UINT,WPARAM,LPARAM);我查资料说是定义一个别名,实在是搞不明白了,谁能帮我解释下这句话的意思?

    其实函数指针并没有那么可怕,下面是之前写过的一份代码,可以参考一下,会发现函数指针很"神奇"...

     

    #include <iostream.h>
    
    double add(int x ,int y )
    {
     double z;
     z=x+y;
     return z;
    }
    
    double sub(int x ,int y )
    {
     double z;
     z=x*y;
     return z;
    }
    
    double mul(int x ,int y )
    {
     double z;
     z=x-y;
     return z;
    }
    
    double div(int x ,int y )
    {
     double z;
     z=x/y;
     return z;
    }
    
    double (*calculator[])(int, int) = {add, sub, mul, div};
    
    void main()
    { 
     double result;
     int  oper;
     
     oper = 1;
     result = calculator[oper](5, 6);
     cout<<result<<endl;
     
    // 即calculator[oper](5, 6)替代了下面的这些代码,是不是发现什么?
    /*
     switch( oper ) 
     { 
     case 0: 
      result = add(5, 6); 
      break; 
     case 1:
      result = sub(5, 6); 
      break; 
    	case 2: 
      result = mul(5, 6);
      break;
     case 3: 
      result = div(5, 6); 
      break;
     } 
    */
    }

     

     

     

    2010年5月31日 4:27
  • 您好 hypeair,

    有一个土鳖办法来看清楚函数指针到底是哪个变量。比如您提供的例子。如果看成一个函数声明的话,就是下面的样子
    LRESULT 函数名(HWND,UINT,WPARAM,LPARAM);
    这样就搞清楚了这个函数到底是什么样子的。

    然后得到下面的等价关系:
    (CALLBACK* WNDPROC)  <=> 函数名
    这样就很容易看出WNDPROC是一个函数指针。

    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    2010年6月3日 8:54
    版主