## Use Pointer Arithmetic Instead of Address Arithmetic

In general, using pointer arithmetic works better than address arithmetic because
pointer arithmetic is independent of the data model, whereas address arithmetic might
not be. It usually leads to simpler code as well. For example,

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

produces the warning:

warning: conversion of pointer loses bits

The following code will produce clean results:

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