别人的程序,其中几行不明白。请问下面2组赋值方法有什么区别?(一个有&,一个没有&)是笔误还是有其它用意?(1)
//new BYTE[ChnNum*CHESTRESPSIMPLEFR/SEGNUMPERSEC]
CapBuffer[bufno][0].pData=ChestRespData[bufno];  // 不明白没有&
//无内存清零函数   // 不明白为什么无内存清零函数

(2)//new BYTE
CapBuffer[bufno][1].pData=&RespRate[bufno];  // 不明白有&
ZeroMemory(CapBuffer[bufno][ParamNo].pData,1);  // 不明白为什么这里要内存清零函数
其中  数组定义:
BYTE ChestRespData[CAPBUFFNUM][CHESTRESPSIMPLEFR/SEGNUMPERSEC];   结构体数组定义:
DATAHEADER CapBuffer[CAPBUFFNUM][TOTALCAPPARAM];
typedef struct tagDataHeader
{
  WORD wStructLength;
  BYTE nDataID;//数据类型:  Eeg Ecg Eog
  WORD wChnNum;//通道数
  WORD wPointNum;//采样点数
  DWORD dwDataLength;//数据长度
  VOID *pData;//数据指针
} DATAHEADER,*LPDATAHEADER;

解决方案 »

  1.   

    对(2)ChestRespData[bufno]本来就是地址,前面加一个&是什么意思?
      

  2.   

    ChestRespData[bufno]与&RespRate[bufno]并不是一个数组 你的代码里没有RespRate的定义 估计是个一维数组吧 所以要&符号 而ChestRespData是个二维数组所以ChestRespData[bufno]本身就是地址。
    有没有清零函数的问题 看具体代码的功能。没法解释
      

  3.   

    TO  lookfor321(): 
     RespRate的定义如下,是1维数组:
      BYTE RespRate[CAPBUFFNUM];代码如下,请解释一下为什么有的地方有内存清零函数,有的地方无内存清零函数?if(capparam.ChestRespParam.bCapture)
    {
    DataRecord.iChestRespPos=ParamNo;
    ChnNum=0;
    ChnNum++;
    CapBuffer[bufno][ParamNo].nDataID=5;
    CapBuffer[bufno][ParamNo].wChnNum=ChnNum;
    CapBuffer[bufno][ParamNo].wPointNum=0;
    CapBuffer[bufno][ParamNo].dwDataLength=0;
    CapBuffer[bufno][ParamNo].pData=ChestRespData[bufno];//new BYTE[ChnNum*CHESTRESPSIMPLEFR/SEGNUMPERSEC];
    ParamNo++;

    DataRecord.iRespRate=ParamNo;
    CapBuffer[bufno][ParamNo].nDataID=11;
    CapBuffer[bufno][ParamNo].wChnNum=1;
    CapBuffer[bufno][ParamNo].wPointNum=1;
    CapBuffer[bufno][ParamNo].dwDataLength=1;
    CapBuffer[bufno][ParamNo].pData=&RespRate[bufno];//new BYTE;
    ZeroMemory(CapBuffer[bufno][ParamNo].pData,1);
    ParamNo++;


    }
      

  4.   

    CapBuffer[bufno][0].pData=ChestRespData[bufno]; 
    相当于
    CapBuffer[bufno][0].pData=&ChestRespData[bufno][0]; RespRate是另外一个一维数组
    ZeroMemory(CapBuffer[bufno][ParamNo].pData,1);
    相当于把RespRate[bufno]清零
      

  5.   

    TO goodboyws(深夜不眠者): 
      那为什么(1)无内存清零函数?
      

  6.   

    从字面上来说,无非就是一些指针操作。但是具体的应用要根据你的使用而定,看样子是要设置一个缓存,用来传递某些参数,那么这些参数是一个具体的值,还是指向其他位置的指针,都得看定义的需要。同样,是否内存清零,也得看参数的需要,比如:CapBuffer[bufno][ParamNo].pData=ChestRespData[bufno];使得pData指向一块内存,这块内存中的数据可能需要保留,因此不清零;CapBuffer[bufno][ParamNo].pData=&RespRate[bufno];这有点特殊,是把另一块内存的地址给pData,最终拐了个弯,还是使得pData指向一块内存,而这块内存很可能是用于接收数据的,为了防止歧义,所以要清零。总之,根据具体的环境和使用的需要来理解,没有规定。
      

  7.   

    一个是一维数组,一个是二维,所以一个有&,一个没有至于是否清0,要看程序需要,单纯从语法角度讲是没有多大意义的