プログラミング言語 C

p が 配列の どれかの要素へのポインタだとすると、p++ では p は インクリメントされ 次の要素を指す。 また p += 1 は (同じく) 現在 p が 指しているところから 1要素分 先を指す。
このような構文は アドレス計算の 最も単純なスタイルである。
ポインタは ある状況のもとでは (互いに) 比較することができる。
つまり p, q が 同じ配列内の 要素を指していれば ==, !=, <, >= などの関係演算子は 正常に使える。 例えば p が q より 初めのほうの 配列要素を指していれば
p < q
は 真である。 任意のポインタ あるいは ゼロと比較して 一致または不一致をみることは 意味をもっている。
しかし、同じ配列内を指していない ポインタ間の演算や比較を行えば (当然) その結果は不定になる。
構文
p + n
は p が 現在指しているところから n番目 先のオブジェクトであることを 意味する。 これは p が 指し示している オブジェクトの型にかかわらず 真である。 (なぜなら) n は p が 指している オブジェクトの大きさに応じて スケールされるからである。
この大きさは p の 宣言によって 決まってくる。 例えば、もし (p が) int型で 4バイトだとすれば int は 4 で スケールされる (<- n x 4)。
すべてのポインタ操作で、指している オブジェクトの大きさは (このように) 自動的に 計算されている。
正しいポインタ操作は、
1. 同じ型のポインタの代入
2. ポインタと整数との加算と減算
3. 同じ配列のメンバーに対する 2つのポインタの引算と比較
4. ゼロの代入やゼロとの比較
に 限られている。 その他の ポインタ演算は すべて不正となる。(p122-126)