質問: pe - 1; p >= a; --p) printf("%d\n", *p); return 0; } ```
回答: p が a[0] の一つ前を指すようになり、その値を a と比較しているので 未定義動作です。 ポインタが配列の要素を指すとき、その値は配列の要素のアドレスと、 最後の要素の次のアドレスだけが許されています。 例えば、セグメントレジスタとオフセットでデータをアクセスする CPU で ポインタがオフセット値だけを持つ場合、配列 a がオフセット 0 から 割り付けられていたとすれば、a[0] のアドレスが 0x0000 でその前が 0xffff となり、p <= a が成立しなくなります。 通常の処理系では問題ありませんが、次のように書くと規格上の問題も解決します。 ``` for (int *p = pe; p > a; ) printf("%d\n", *--p); ```