zoukankan      html  css  js  c++  java
  • 关于指针的一种用法

    在看别人的程序时发现的

    假定有两个函数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;
    }


  • 相关阅读:
    python中读取文件数据时要注意文件路径
    sklearn.model_selection 的 train_test_split作用
    matplotlib中subplot的各参数的作用
    用梯度下降算法求最值
    AfxMessageBox与MessageBox用法与区别
    MFC、API、C++三者的区别
    2、CString与string借助char *互转
    1、创建MFC应用程序——单个文档
    1、Mat类的属性、方法
    CMake编译OpenCV
  • 原文地址:https://www.cnblogs.com/lmzjh/p/4263991.html
Copyright © 2011-2022 走看看