📦 変数・型・演算子
if (x & 1 == 0) が思った通りに動きません。gcc: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]。*p++ を「指す先を1増やす」つもりで書いて、値が増えないのも同じ種類の誤解です。
== は & より優先順位が高いので、x & 1 == 0 は x & (1 == 0) すなわち x & 0 になります。*p++ は *(p++) と解釈され、増えるのはポインタのほうです。
意図を括弧で書きます: if ((x & 1) == 0)、(*p)++。ビット演算・条件演算子・カンマ演算子が混ざる式は、優先順位を暗記するより括弧を足すほうが安全で読みやすくなります。-Wall の parentheses 警告を無視しないことが再発防止です。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。