在main函数内继续定义两个n变量a和b,分别赋予不同的值,然后分别调用swap1,swap2,swap3函数,将a和b(swap2是用a和b的地址)作为参数传递给以上函效,然后用cout输出a和b的值,在注释里解释输出结果的不同。
时间: 2024-09-13 14:07:12 浏览: 25
```cpp
#include <iostream>
// 三个swap函数
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap3(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
// 定义并初始化变量a和b
int a = 5, b = 10;
// 调用swap1函数,交换a和b的值
std::cout << "Before swap1: a = " << a << ", b = " << b << std::endl;
swap1(a, b);
std::cout << "After swap1: a = " << a << ", b = " << b << std::endl; // 输出:a = 10, b = 5
// 使用指针调用swap2,交换的是地址指向的值
int* aptr = &a;
int* bptr = &b;
std::cout << "Before swap2: a = " << a << ", b = " << b << std::endl;
swap2(aptr, bptr);
std::cout << "After swap2: a = " << a << ", b = " << b << std::endl; // 输出:a = 10, b = 5 (未变,因为交换的是指针所指向的值)
// 使用引用调用swap3,直接修改a和b的值
std::cout << "Before swap3: a = " << a << ", b = " << b << std::endl;
swap3(a, b);
std::cout << "After swap3: a = " << a << ", b = " << b << std::endl; // 输出:a = 10, b = 5
return 0;
}
```
在上述代码中,`swap1`是对值进行交换,所以调用后a和b的值互换;`swap2`则是对指针所指向的值进行交换,由于传递的是a和b的地址,因此它们自身并未改变;而`swap3`是通过引用直接修改了a和b的值,所以结果也是一样的互换。