C ユーザーズガイド

アドレス演算の代わりのポインタ演算

ポインタ演算が常にデータモデルから独立しているのに対し、アドレス演算は独立していないことがあるため、一般的にはアドレス演算を使用するより、ポインタ演算を使用する方がよいでしょう。また、通常、ポインタ演算を使用することによって、コードを簡単にすることもできます。次の例を考えてみましょう。


int *end;
int *p;
p = malloc(4 * NUM_ELEMENTS);
end = (int *)((unsigned int)p + 4 * NUM_ELEMENTS);

%
警告: ポインタの変換でビットが失われます

修正版は次のようになります。


int *end; 
int *p;
p = malloc(sizeof (*p) * NUM_ELEMENTS);
end = p + NUM_ELEMENTS;