Two pointers point to the same chunk of memory, preventing the compiler from doing certain optimizations.
Example
void foo(int *array, int *size, int *value) {
for(int i = 0; i < *size; ++i) {
array[i] = 2 * (*value);
}
}
*value
could be an alias for an element of the array it could change on any given iteration.