练习4:使用引用参数交换两个整数¶
任务描述¶
编写函数 swapValues,交换两个 int 整数变量的值。
函数必须使用非常量引用作为参数。调用函数后,实参本身的值应被交换,而不是只交换函数内部副本的值。
例如,若调用前 x = 10、y = 20,执行 swapValues(x, y) 后,应得到 x = 20、y = 10。
相关知识¶
引用:变量的别名¶
引用是已存在变量的别名,定义时必须初始化。
引用一旦绑定到变量后不能重新绑定;对引用赋值是在修改它所绑定的变量。
引用作为函数参数¶
函数参数声明为 int& 时,函数可以直接修改调用者传入的变量。
与指针参数相比,引用参数在调用时不需要使用取地址运算符:
引用不能为空,因此本题不需要进行空指针检查。
临时变量¶
交换两个变量的值通常需要一个临时变量,避免第一个赋值操作覆盖原来的数据。
编程要求¶
- 使用 C++11 标准编写程序。
- 完成函数
swapValues的函数体。 - 函数必须采用以下声明形式:
- 不得使用指针参数或取地址运算符调用函数。
- 不得调用标准库的
std::swap。 - 函数调用后,
a与b所绑定变量的值必须互换。 - 在
test函数中使用assert验证交换结果。 - 在
main函数中调用test函数,并保留测试通过信息与返回语句。
待完成代码¶
#include <cassert>
#include <iostream>
// TODO:使用引用参数完成交换
void swapValues(int& a, int& b) {
// TODO
}
void test() {
int x = 10;
int y = 20;
swapValues(x, y);
assert(x == 20);
assert(y == 10);
int a = -5;
int b = 0;
swapValues(a, b);
assert(a == 0);
assert(b == -5);
int same1 = 42;
int same2 = 42;
swapValues(same1, same2);
assert(same1 == 42);
assert(same2 == 42);
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
test 函数应至少覆盖以下三种情况:
| 测试项 | 调用前 | 函数调用 | 预期结果 |
|---|---|---|---|
| 两个正整数 | x = 10, y = 20 |
swapValues(x, y) |
x = 20, y = 10 |
| 负数与零 | a = -5, b = 0 |
swapValues(a, b) |
a = 0, b = -5 |
| 两个相同值 | same1 = 42, same2 = 42 |
swapValues(same1, same2) |
两者仍为 42 |
如果函数错误地采用值传递:
则函数只能交换内部副本,调用者的变量不会改变,第一组 assert 测试将失败。
开始你的任务吧,祝你成功!