其中,
RCV_REPORT_STRUCTEx 是结构,
PRCV_REPORT_STRUCTEx 是结构的指针。
pBaseBuf 为地址整数,
nBufSize 为整数。

解决方案 »

  1.   

    把PRCV_REPORT_STRUCTEx[pBaseBuf + nBufSize*i] 的地址传给PRCV_REPORT_STRUCTEx结构的实例的指针。
      

  2.   

    typedef struct tagRCV_REPORT_STRUCTEx
    {
    ...
    } RCV_REPORT_STRUCTEx, *PRCV_REPORT_STRUCTEx, *LPRCV_REPORT_STRUCTEx;...
    void Fun1()
    {
      RCV_REPORT_STRUCTEx abc[300];
      Init(abc,300);
    ...
    }...
    BOOL Init(void* pBaseBuf , int nCount)
    {int nBufSize = sizeof(pRCV_REPORT_STRUCTEx);
    ...
     for (int n=0; n<nCount; n++)
     {
       RCV_REPORT_STRUCTEx & Buf = *(PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i );
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Buf.member = ...
       if (xxx)
         return FALSE;
     }
      return TRUE;
    }
      

  3.   

    Buf的空间是否得到创建?
    是否将pBaseBuf中的内容复制到了Buf中,还是仅仅将Buf指向了pBaseBuf的地址?
      

  4.   

    其实bskay已经说得很明白了!
    能让我来说说我的看法吗?
    正如问题中所示,RCV_REPORT_STRUCTEx 是个结构。如果我有一系列这样的结构,为了方便引用,就定义一个这种结构的数组,如
    int nBufSize = sizeof(RCV_REPORT_STRUCTEx); // 将大小保存在pBufSize中
    RCV_REPORT_STRUCTEx *pBaseBuf = (RCV_REPORT_STRUCTEx *)malloc(nBufSize * N);
    之后,如果你想引用这个RCV_REPORT_STRUCTEx 数组中第i个内容的话,你就可以这样:
    RCV_REPORT_STRUCTEx Buf = pBaseBuf[i];
    即,RCV_REPORT_STRUCTEx Buf = *(pBaseBuf + nBufSize * i);
    如果为了安全引用,则可以用你所列的那样:
    RCV_REPORT_STRUCTEx & Buf = *(pBaseBuf + nBufSize * i);
    不知道这样用中文而不是代码解释得对不对?
    更不知道你现在知道了吗?
      

  5.   

    其实我没搞清的就是 符号 "&" 和 “*”的含义。如果RCV_REPORT_STRUCTEx  * p ,我知道是定义了一个指针,但是
    RCV_REPORT_STRUCTEx & Buf就不懂了。同样, *(pBaseBuf + nBufSize * i) 是什么东东也不明白。
      

  6.   

    而且,
    RCV_REPORT_STRUCTEx Buf = pBaseBuf[i];

    RCV_REPORT_STRUCTEx Buf = *(pBaseBuf + nBufSize * i);

    RCV_REPORT_STRUCTEx & Buf = *(pBaseBuf + nBufSize * i);
    有什么区别?为什么要用最后一种呢?
      

  7.   

    多谢uguess!在实际运行中,发现1、3两种方式似乎都能工作,好象也没什么区别啊。
      

  8.   


    RCV_REPORT_STRUCTEx Buf = pBaseBuf[i];
    RCV_REPORT_STRUCTEx Buf = *(pBaseBuf + nBufSize * i);  //是赋值

    RCV_REPORT_STRUCTEx & Buf = *(pBaseBuf + nBufSize * i); //是引用,特别地pBaseBuf
                                                            //的类型可以是void*
                                                            //好传递BOOL Init(void* pBaseBuf , int nCount)
              ~~~~~~~~~~~~~~r u std?