typedef struct 

  BOOL bInUse; 
  BYTE bOtherData[2049 - sizeof(BOOL)]; 
} SOMEDATA, *PSOMEDATA; PSOMEDATA g_pSomeData = NULL; g_pSomeData = (PSOMEDATA) VirtualAlloc(NULL, 
            MAX_SOMEDATA * sizeof(SOMEDATA), MEM_RESERVE, PAGE_READWRITE); 当为g_pSomeData 调拨了物理存储后,为什么可以用数组的方式索引数据阿,例如:   g_pSomeData[uIndex].bInUse = TRUE;

解决方案 »

  1.   

    VirtualAlloc分配的是在进程的地址空间中分出一块内存,然后把这块内存强制转换成PSOMEDATA结构,可能这内存是按数值的形式存储的!
    挺难理解的!
      

  2.   

    这就是指针啊,只要访问的内存地址有效,指针就可以向这个地址。
    BOOl实际就是int,占8个字节。
    后面的BYTE一个占一个字节。
    g_pSomeData起始位置向后移动8个字节就是bOtherData对应的第一个值,即:
    g_pSomeData[8] == g_pSomeData.bOtherData[0]
    g_pSomeData[9] == g_pSomeData.bOtherData[1]
    g_pSomeData[10] == g_pSomeData.bOtherData[2]
      

  3.   

    这是C语法,运算符[]的使用:取出某地址中所储存的数据
    和VirtualAlloc没什么关系,
    用new,malloc,VirtualAlloc这些分配内存都是 连续的虚拟内存,否则返回错误
    所以很简单的就能通过 返回的首地址 进行操作这块内存如
    char *p = new char[10];
    p[2] = 'a';另外LS别误导..
    BOOL占4个字节,32位系统吧
    g_pSomeData[8] == g_pSomeData.bOtherData[0]?-.-?
    左边是结构体,右边是BYTE,相等??