Путаница с указателями и ссылками в переполнении стека

У меня есть куча кода, как это:

#include <iostream>
using namespace std;

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int main() {

int a;
int b;
a = 7;
b = 5;
swap(a, b);
cout << a << b;

return 0;
}

Этот код делает процесс обмена как то, что я точно хотел поменять 2 числа

Но когда я хочу два числа от пользователя следующим образом;

int a;
int b;
cin >> a;
cin >> b;
swap(a, b);
cout << a << b;

Компилятор выдает ошибку о целочисленной * целочисленной ошибке, как и ожидалось. Почему первый код делает правильный обмен, хотя я не использовал метод с & оператор?

19

Решение

В первом примере std::swap называется, из-за вашего using namespace std,
Второй пример точно такой же, как и первый, поэтому вы можете его не использовать.

В любом случае, если вы переименуете свою функцию в my_swap или что-то в этом роде (и меняются каждый раз), тогда первый код не должен работать, как ожидалось. Или удалите using namespace std и позвонить std::cin а также std::cout в явном виде. Я бы порекомендовал второй вариант.

55

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector