Из стандарта C (6.5.2.1 подписка на массив)
2 Постфиксное выражение, за которым следует выражение в квадратных скобках [], является индексным обозначением элемента объекта массива. Определение оператора индекса [] заключается в том, что E1 [E2] идентична (* ((E1) + (E2))). Из-за правил преобразования, которые применяются к бинарному оператору +, если E1 является объектом массива (эквивалентно указателю на начальный элемент объекта массива), а E2 является целым числом, E1 [E2] обозначает E2- th-й элемент E1 (считая с нуля).
Поэтому при вызове функции, подобной
swap1(arr[i],arr[j]);
, вы передаете значения двух элементов массива , Чтобы передать указатели на эти элементы, вы можете написать
swap1( arr + i, arr + j );
Разница будет очевидна, если первый вызов переписать, как написано в цитате из C Standard
swap1(arr[i],arr[j]);
эквивалентно
swap1( *( arr + i ), *( arr +j ) );
, то есть указатели разыменовываются перед передачей управления функции.