C ++代码翻译和解释

时间:2011-06-15 09:01:02

标签: c++ pointers

我有以下c ++代码段。我对c ++代码有基本的了解。请在必要时更正我对以下代码的解释:

for (p = q->prnmsk, s = savedx->msk, j = sizeof(q->prnmsk);
           j && !(*p & *s); j--, p++, s++);

它包含什么:q是char * q(如声明的那样)是根据代码的结构MSK的类型。                       q-> prnmsk包含字节数据,其中prnmask包含15个字节。

与s相似。 因此在for循环中,当j减小时,它将遍历每个字节并执行此!(*p & *s)操作以继续循环,并且最终如果不满足条件,则循环将退出,否则j将运行直到j == 0。

我说错了吗? * p和* s是什么意思?它是否包含字节值?

2 个答案:

答案 0 :(得分:3)

有些人(像我一样)可能会认为以下内容更具可读性

int j;
for (j = 0; j < sizeof(q->prnmsk); ++j)
{
  if ((q->prnmsk[j] & savedx->msk[j]) != 0) break;
}

这意味着迭代q-> prnmsk和savedx-> msk,以找到第一次出现位和为零的情况。如果j等于sizeof(q-> prnmsk),则所有位和为零。

答案 1 :(得分:1)

是的,你是对的。 !(*p & *s)表示他们想要检查q->prnmsksavedx->msk是否同时将相应位设置为1