请高手看看这句话怎么理解

benzite 2006-03-02 11:00:59
下面这段代码是侯捷老先生译的Win32多线程程序设计,我又一句话实在看不懂,请高手指点一下:

struct SharedBlock;
extern SharedBlock* gpSHaredBlock;
struct SharedBlock
{
short m_nStringCount;
char __based(gpSharedBlock) *m_pStrings[1];// 这句话看不懂
};

原书中这样说:“成员变量m_pStrings是一个由“based”指针所组成的数组,每一个指针指向char“

我不明白的是我们定义变量一般char *m_pString[1]还算能接受,但是中间一下自多出来个__based(gpSharedBlock),实在理解不了,请高手指点了,谢谢了。
...全文
78 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
benzite 2006-03-04
  • 打赏
  • 举报
回复
谢谢你,你解释的非常对。
dearlee_01 2006-03-03
  • 打赏
  • 举报
回复
该关键字主要用来解决一些和共享内存有关的问题,它允许指针被定义为从某一点开始算的32位偏移值,而不是内存种的绝对位置
  举个例子:


  typedef struct tagDEMOSTRUCT {
  int a;
  char sz[10];
  } DEMOSTRUCT, * PDEMOSTRUCT;
  HANDLE hFileMapping = CreateFileMapping(...);
  LPVOID lpShare = (LPDWORD)MapViewOfFile(...);

  DEMOSTRUCT __based(lpShare)* lpDemo;



  上面的例子声明了一个指针lpDemo,内部储存的是从lpShare开始的偏移值,也就是lpHead是以lpShare为基准的偏移值.上面的例子种的DEMOSTRUCT只是随便定义的一个结构,用来代表任意的结构.

  虽然__based指针使用起来非常容易,但是,你必须在效率上付出一定的代价.每当你用__based指针处理数据,CPU都必须为它加上基地址,才能指向真正的位置.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧