次のコード フラグメントを検討してください。
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
私はポインタ演算がインテリジェントであることを知っています。つまり、操作が次の 3 整数配列を指すのに十分なバイト数だけ先にq++
進むことを意味します。そのため、最初の出力が ' ' であることq
は驚くことではありません。12, 0
q
しかし、2 番目のプリントは私を驚かせます。1が印刷されます!
では、なぜ 12 ではなく 1 を出力するのでしょうか? それは私を困惑させるだけです。