MFX深入浅出有这么一段:
struct AFX_MSGMAP_ENTRY;
struct AFX_MSGMAP{
AFX_MSGMAP* pBaseMessageMap;
AFX_MSGMAP_ENTRY* lpEntries;
};#define DECLARE_MESSAGE_MAP()
    static AFX_MSGMAP_ENTRY _messageEntries[];
static AFX_MSGMAP messageMap;
virtual AFX_MSGMAP* GetMessageMap() const;#define BEGIN_MESSAGE_MAP(theClass,baseClass)
AFX_MSGMAP* theClass::GetMessageMap() const{
return &theClass::messageMap
} AFX_MSGMAP theClass::messageMap={
  &(baseClass::messageMap),
(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries)}
提问:
(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries)这里干嘛弄个(AFX_MSGMAP_ENTRY*) &转换,为何不直接用TheClass::_messageEntries,如:
          AFX_MSGMAP theClass::messageMap={
&(baseClass::messageMap),
TheClass::_messageEntries}

解决方案 »

  1.   

    我知道数据类型匹配,
    比如:
    int *p;
    int a[];
    p=a就可以了,照上面说的,
    AFX_MSGMAP_ENTRY* lpEntries
    AFX_MSGMAP_ENTRY _messageEntries[]; 
    lpEntries=(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries).
    难道要p=(int*)&a.
      

  2.   

    我知道数据类型匹配,
    比如:
    int *p;
    int a[];
    p=a就可以了,照上面说的,
    AFX_MSGMAP_ENTRY* lpEntries
    AFX_MSGMAP_ENTRY _messageEntries[]; 
    lpEntries=(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries).
    难道要p=(int*)&a.
      

  3.   

    针对上面的情况我写了个相同简化的例子,如果是类型不对,怎么会下面语句可以运行。
    #include<iostream> 
    using namespace std; 
    struct st 

        int *p; 
    }; 
    int main() { 
        int a[]={1,2}; 
        st st1={a}; 
        cout<<st1.p[0]<<st1.p[1]<<endl; 
        st st2={(int*)&a}; 
        cout<<st2.p[0]<<st2.p[1]<<endl; 
        return 0