关于指针的一种用法

来源:互联网 发布:钉钉办公软件下载 编辑:程序博客网 时间:2024/05/28 23:20

在看别人的程序时发现的

假定有两个函数A和B

在函数A中new BYTE[]一个数组,之后将这个数组的地址(new之后会产生这个数组的首地址)以参数的形式传递给函数B

在函数A结束时删掉这个动态申请的数组。

在函数A结束之前函数B由于被调用就开始执行

在函数B中可以用这个首地址以数组的方式(下标访问)来访问这块内存

示例如下:

void CALLBACK CBTHDlg::OnSerialRead(void *pOwner, BYTE *buf, DWORD buflen)//----------------------------函数A{BYTE *pRecvBuf = NULL;CBTHDlg *pThis = (CBTHDlg*)pOwner;pRecvBuf = new BYTE[256];ZeroMemory(pRecvBuf, 256);CopyMemory(pRecvBuf, buf, buflen);pThis->PostMessageW(WM_RECV_SERIAL_DATA, WPARAM(pRecvBuf), buflen);//首地址pRecvBuf以参数的形式传给函数Bdelete []pRecvBuf;pRecvBuf =NULL;}LONG CBTHDlg::OnRecvSerialData(WPARAM wParam, LPARAM lParam)//--------------------函数B{char *aRecv = (char *)wParam;CString strRecv = L"";static CString strRecv1 = L"";CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);CButton* pBtnCheck = (CButton*)GetDlgItem(IDC_CHK_16);int state = pBtnCheck->GetCheck();if(state == 0){pEdtRecv->GetWindowTextW(strRecv1);strRecv = CString(aRecv);pEdtRecv->SetWindowTextW(strRecv1+strRecv);}else{int i;//strRecv = CString(aRecv);for(i = 0; i<lParam; i++){strRecv.Format(L"%x", aRecv[i]);//函数B中以数组下标的方式来访问这一块内存pEdtRecv->GetWindowTextW(strRecv1);pEdtRecv->SetWindowTextW(strRecv1+strRecv);}}delete[] aRecv;aRecv = NULL;return 0;}


原创粉丝点击