关于指针的一种用法

在看别人的程序时发现的

假定有两个函数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以参数的形式传给函数B
	delete []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;
}


posted @ 2012-10-25 15:14  ECDP  阅读(233)  评论(0编辑  收藏  举报