首先让我们看一段代码:
void GetCtrlRectViaParent( LPRECT lprc, HWND hwndDlg, UINT idCtrl )
{
POINT pt;
HWND hwndCtrl = GetDlgItem(hwndDlg, idCtrl);
GetWindowRect( hwndCtrl, lprc );
memcpy( &pt, lprc, sizeof(POINT) );
ScreenToClient( hwndDlg, &pt );
memcpy( lprc, &pt, sizeof(POINT) );
memcpy( &pt, lprc + sizeof(POINT), sizeof(POINT) );
ScreenToClient( hwndDlg, &pt );
memcpy( lprc + sizeof(POINT), &pt, sizeof(POINT) );
}
类似上面那个 函数 ——大家有没有发现问题呢?错在哪里?粗略咋一看,并没有不对的地方啊!奇怪了,可就是当执行时,100%出错!为什么呢?如果你找不到错误来,那么请你再回去看看指针那一章。否则,下面那一段就不用看了。^_^
哇哇!晕了,找了半天还是没找出来吗?头疼了吧?
还让我告诉你吧! lprc + sizeof(POINT) 就这一段!注意了,指针虽然就是一个地址!并且一个地址也就是一个DWORD!显然一个DWORD+sizeof(POINT)得出来的结果当然也 就是我 们想要的新位址!不可,如果你真这么想,那就说明你对C的指针掌握的还不够火厚!
1、指针的 加减 时,并不是简单的位址加减,而是它指向的数据类型的加减!不信你试试!
2、如果要操作 指针 的新位址,我们应该这样做:(void*)(((DWORD)lprc) + sizeof(POINT))。
测试代码:
MsgInfo( "%d, %d, %d, %d, %d, %d, %d", lprc,&(lprc->left),&(lprc->top), sizeof(POINT), lprc + sizeof(POINT), &(lprc->right), lprc + sizeof(RECT) );
嘿嘿!一目了然吧!?