2011-06-15 127 views
1

我有以下C++代碼片段。我有C++的一個基本的瞭解code.Please糾正我下面的代碼解釋何地需要: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減小時,它將遍歷每個字節並執行此操作來繼續循環,並且最終如果不滿足條件,則循環將退出,否則,j將運行至j == 0。

我正確嗎? * p和* s是什麼意思?它會包含字節值嗎?

+0

你能否提供所有變量聲明的代碼? – 2011-06-15 09:02:17

+0

如果p是一個指針,那麼* p是該指針指示的對象 – 2011-06-15 09:04:34

回答

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),則所有位都是零。

+0

謝謝我也認爲是相同的。問題中的代碼令我困惑。 – JavaBits 2011-06-15 10:11:28

1

是的,你是對的。 !(*p & *s)意味着他們想要檢查q->prnmsksavedx->msk是否沒有同時設置爲1的對應位。