В вашем коде есть пара проблем ...
Во-первых, вы хотите поменять местами значения двух целых чисел (в массиве), поэтому функция работает на int
s. Кроме того, вы хотите изменить параметры, следовательно, вы должны использовать ссылки (без указателей, потому что передача нулевого указателя не имеет смысла для swap
).
Далее, у вас есть оператор return
в функции, которая объявлена ничего не возвращающей (void
тип возвращаемого значения). Кроме того, эти
return data[a], data[b];
Неправильные типы данных и функции, объявленные как void
, не выполняют то, что вы ожидаете. Оператор запятой вычисляет оба операнда, и результатом является операнд с правой стороны. В любом случае, здесь это не имеет значения, потому что вам не нужно ничего возвращать (вместо этого изменяются параметры).
Исправление тех, что у нас есть:
void swap(int& a,int& b) {
int temp = a;
a = b;
b = temp;
}
Однако вам действительно не следуетнаписать этот кодВ <utility>
есть std::swap
, который уже делает то, что вы хотите.
PS : Передача массивов в стиле c в функции - это совсем другая история. Вам не нужно передавать массив в функцию, чтобы изменить только два его элемента. В любом случае, вам, вероятно, следует использовать std::vector
, так как с ним гораздо проще работать.