Почему указатель на первый элемент массива имеет адрес, отличный от адреса этого массива?
В первом случае, &ptr - это адрес в памяти самого указателя ptr.
В первом случае адреса не равны, почему?
Потому что arr и ptr - это две разных переменных. Соответственно, они не могут занимать одну и ту же область памяти. &arr[0] "идентичен" arr, а не &arr.