一个C/C++程序员最容易犯的错误!

首先让我们看一段代码:

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) );

嘿嘿!一目了然吧!?

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值