Итак, я сомневаюсь, что я пытался вызвать вызов по значению. При запуске данного кода обмен происходит, когда я пишу определение функции после int main(). Но если я вырезаю и вставляю определение функции выше int main(), обмен происходит не состояться. Это почему?
#include<iostream>
#include<string>
#include<vector>
#include<bitset>
#include<fstream>
using namespace std;
#define ADDU 1
#define SUBU 3
#define AND 4
#define OR 5
#define NOR 7
#define MemSize 65536
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main(){
// int a = 20;
// int *p = &a;
// cout<<"P: "<<p<<endl<<"*P gives: "<<*p<<endl<<"&p gives: "<<&p<<endl<<"&a : "<<&a;;
int x,y;
x = 10;
y = 20;
cout<<"Before Swapping: "<<"x: "<<x<<endl<<"y: "<<y<<endl;
swap(x,y);
cout<<"After Swapping: "<<"x: "<<x<<endl<<"y: "<<y<<endl;
}
using namespace std;
в вашем коде, но я предполагаю, что после того, как вы переместите его после того, какmain
:std::swap
будет использоваться вместо вашей функции. Ваша функция не выполняет обмен, поскольку значения передаются по значению, а не по ссылке, поэтому она меняет местами только копии этих переменных. - person Algirdas Preidžius   schedule 10.10.2019void swap(int& a, int& b)
(как сказал @AlgirdasPreidžius, перейдите по ссылке) - person fas   schedule 10.10.2019using namespace std;
используетсяstd::swap
(даже если вы не включили заголовок, который его определяет: он мог быть включен другими заголовками STL), поэтому уместно прочитать: Почему «использование пространства имен std;» считается плохой практикой? и возможным (?) дублированием: C++ прохождение по ссылке или по значению? - person Algirdas Preidžius   schedule 10.10.2019x
иy
копируются, когда вы передаете их в свойswap
(какa
иb
), и вы меняете местамиa
иb
, а неx
иy
- person fas   schedule 10.10.2019swap
так, чтобы оно шло послеmain
, немного отвлекающий маневр. Его удаление имело бы тот же эффект. - person Pete Becker   schedule 10.10.2019