(edyang 傻乎乎的说)
1)表示你的当前调试步骤改变了变量的值;
2)sizeof(m_szBuffer) 也可写成 sizeof m_szBuffer;sizeof 是编译器位操作符,用于在编译室确定(在当前平台)为变量的所需分配的存储器大小。这里(Win32/Intel),sizeof m_szBuffer == 4,而不是 4096 或其他,因为本质上,m_szBuffer 是一个指向 char 数组的指针。
3)在
CwizApp* pApp=(CwizApp*)AfxGetApp();
中,(CwizApp*)AfxGetApp(); 表示类型牵制转换(type cast 或 type coersion),以确保程序在运行时能正确无误。
这种些法从理论上来讲是比较古老的做法,但因习惯驱使,大多数从 C 编程过来的人还都用这种形式;ANSI C/C++ 推荐的格式是:
typename(var_to_be_cast);
形式上即向函数调用一样。但是,typename 必须是简单数据类型或复合数据类型的 ALIAS;如,对于你的例子,不能直接使用,必须先
typedef CwizApp *PMYAPP;
定义一个别名,然后再:
CwizApp *pApp = PMYAPP(AfxGetApp());
另外,C++ 在编译时类型检查和运行时类型检查都有新的扩展,如 static_cast/const_cast/dynamic_cast/reinterpret_cast,这些在 Microsoft MSDN 站点上有撰文进行介绍(Deep C++)。用
CwizApp* pApp;
pApp->AfxGetApp();
是不行的,你还是需要牵制类型转换:
CwizApp* pApp;pApp->(CwizApp *)AfxGetApp();
这样可以。
1)表示你的当前调试步骤改变了变量的值;
2)sizeof(m_szBuffer) 也可写成 sizeof m_szBuffer;sizeof 是编译器位操作符,用于在编译室确定(在当前平台)为变量的所需分配的存储器大小。这里(Win32/Intel),sizeof m_szBuffer == 4,而不是 4096 或其他,因为本质上,m_szBuffer 是一个指向 char 数组的指针。
3)在
CwizApp* pApp=(CwizApp*)AfxGetApp();
中,(CwizApp*)AfxGetApp(); 表示类型牵制转换(type cast 或 type coersion),以确保程序在运行时能正确无误。
这种些法从理论上来讲是比较古老的做法,但因习惯驱使,大多数从 C 编程过来的人还都用这种形式;ANSI C/C++ 推荐的格式是:
typename(var_to_be_cast);
形式上即向函数调用一样。但是,typename 必须是简单数据类型或复合数据类型的 ALIAS;如,对于你的例子,不能直接使用,必须先
typedef CwizApp *PMYAPP;
定义一个别名,然后再:
CwizApp *pApp = PMYAPP(AfxGetApp());
另外,C++ 在编译时类型检查和运行时类型检查都有新的扩展,如 static_cast/const_cast/dynamic_cast/reinterpret_cast,这些在 Microsoft MSDN 站点上有撰文进行介绍(Deep C++)。用
CwizApp* pApp;
pApp->AfxGetApp();
是不行的,你还是需要牵制类型转换:
CwizApp* pApp;pApp->(CwizApp *)AfxGetApp();
这样可以。
2.如果这样写 char m_szBuffer[4096];
那么sizeof m_szBuffer[4096]返回的是4096,如果这样写
char *m_pBuffer = new char[4096];
对于Intel x86来说(早期的不算),sizeof m_pBuffer返回的是4,也就是说,如果静态地分配数组,sizeof返回总共的大小;如果动态分配内存,sizeof返回的是指针的大小,一般是4字节。