Вы не можете использовать сравнение указателей для сравнения указателей, которые указывают на разные массивы.
Итак:
int arr[5] = {1, 2, 3, 4, 5};
int * p = &arr[0];
int anotherarr[] = {1, 2};
int * pf = &anotherarr[0];
Вы не можете сделать if (p == pf)
, поскольку p
и pf
не указывают на один и тот же массив. Это приведет к неопределенному поведению.
Вы можете положиться на сравнение указателей, если они указывают в одном массиве.
Не уверен насчет арифметического случая сам.