首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++语法这句C代码在((char *)curr += curr->NextEntryDelta);C++中如何改

2012-04-02 
C++语法这句C代码在((char *)curr + curr-NextEntryDelta)C++中怎么改((char *)curr + curr-NextEntr

C++语法这句C代码在((char *)curr += curr->NextEntryDelta);C++中怎么改
((char *)curr += curr->NextEntryDelta);

上面的代码是在C中通过编译并正常使用的,在C++中出错:左操作数必须为左值  

(curr += curr->NextEntryDelta);
去掉(char*)可以通过编译,但是运行会出错,我昨天发过帖子 *(char**)用这个命令也出错,

  if( NT_SUCCESS(ntStatus)) 
  {
  if(SystemInformationClass == 5)
  {
struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemInformation;
  struct _SYSTEM_PROCESSES *prev = NULL;
 
while(curr)
{
if (curr->ProcessId != 0 && pid != 0)
{
if(curr->ProcessId == pid)
{
m_UserTime.QuadPart += curr->UserTime.QuadPart;
m_KernelTime.QuadPart += curr->KernelTime.QuadPart;

if(prev)
{
if(curr->NextEntryDelta)
prev->NextEntryDelta += curr->NextEntryDelta;
else
prev->NextEntryDelta = 0;
}
else
{
if(curr->NextEntryDelta)
{
(char *)SystemInformation += curr->NextEntryDelta;//还有这句
}
else
SystemInformation = NULL;
}
}
}
else
{
curr->UserTime.QuadPart += m_UserTime.QuadPart;
curr->KernelTime.QuadPart += m_KernelTime.QuadPart;
m_UserTime.QuadPart = m_KernelTime.QuadPart = 0;
}
prev = curr;
if(curr->NextEntryDelta) ((char *)curr += curr->NextEntryDelta);//这句代码
else curr = NULL;
}
}
else if (SystemInformationClass == 8)
{
  struct _SYSTEM_PROCESSOR_TIMES * times = (struct _SYSTEM_PROCESSOR_TIMES *)SystemInformation;
  times->IdleTime.QuadPart += m_UserTime.QuadPart + m_KernelTime.QuadPart;
}

  }
  return ntStatus;
}

[解决办法]
用个临时指针+,然后在强转回来
char *pTemp = (char *)curr;
pTemp+=curr->NextEntryDelta;
curr = (struct _SYSTEM_PROCESSES *)pTemp;
[解决办法]

探讨
看起来好像是用(char *)转为地址然后加上一个值形成地址跳转!因为地址是4字节存储的!加上ULONG的正好形成一个地址跳转!C 中出错不知道什么原因…按理说应该支持的!

热点排行