• C++自定义swap函数实现交换两个变量的值兼谈参数传递


    C++自定义swap函数实现交换两个变量的值兼谈参数传递

    在C++中,交换两个变量的值可以通过多种方法实现。常见的是使用临时变量,源码如下:

    在上面的代码中,我们首先定义了两个变量a和b,并使用cout语句输出了它们的初始值。然后,我们使用一个临时变量temp来存储a的值,将b的值赋给a,再将temp的值赋给b,这样就完成了a和b的交换。

    1. #include
    2. using namespace std;
    3. int main() {
    4. int a = 10, b = 20;
    5. cout << "交换前: a = " << a << ", b = " << b << endl;
    6. // 交换a和b的值
    7. int temp = a;
    8. a = b;
    9. b = temp;
    10. cout << "交换后: a = " << a << ", b = " << b << endl;
    11. return 0;
    12. }

    下面我们还是使用临时变量这种算法,但采用自定义函数swap实现。

    注意,如下的代码不能交换两个变量的值:

    1. #include
    2. using namespace std;
    3. //自定义交换函数swap
    4. void swap(int a, int b) {
    5. int temp = a;
    6. a = b;
    7. b = temp;
    8. }
    9. int main() {
    10. int a = 10, b = 20;
    11. cout << "交换前: a = " << a << ", b = " << b << endl;
    12. //调用 交换函数swap
    13. swap(a, b);
    14. cout << "交换后: a = " << a << ", b = " << b << endl;
    15. return 0;
    16. }

    这个程序不能交换两个变量的值,这是因为,在C++中,变量在传递到函数时默认是按值传递的。这意味着函数内部操作的只是参数的副本,而不是原始变量。因此,当你在swap函数内部交换两个变量时,只是交换了这两个变量的副本,而原始的a和b并没有改变。

    如果你想要函数交换两个变量的值,你需要使用引用参数或指针变量参数。

    先看,使用引用参数来自定义交换函数swap,源码如下:

    1. #include
    2. using namespace std;
    3. //自定义交换函数swap ,使用引用参数来传递变量的地址
    4. void swap(int &a, int &b) {
    5. int temp = a;
    6. a = b;
    7. b = temp;
    8. }
    9. int main() {
    10. int a = 10, b = 20;
    11. cout << "交换前: a = " << a << ", b = " << b << endl;
    12. //调用 交换函数swap
    13. swap(a, b);
    14. cout << "交换后: a = " << a << ", b = " << b << endl;
    15. return 0;
    16. }

    再看,使用指针参数来自定义交换函数swap,源码如下:

    1. #include
    2. using namespace std;
    3. //自定义交换函数swap ,使用指针作参数来传递变量的地址
    4. void swap(int *a, int *b) {
    5. int temp = *a;
    6. *a = *b;
    7. *b = temp;
    8. }
    9. int main() {
    10. int a = 10, b = 20;
    11. cout << "交换前: a = " << a << ", b = " << b << endl;
    12. //调用 交换函数swap
    13. swap(&a, &b); //当使用指针作为参数时,需要使用取地址运算符 & 获取变量的地址。
    14. cout << "交换后: a = " << a << ", b = " << b << endl;
    15. return 0;
    16. }

    关于C++参数传递更多情况可见https://blog.csdn.net/cnds123/article/details/119272530

  • 相关阅读:
    VUE学习第三篇----VUE实例
    Java面试题大全(整理版)1000+面试题附答案详解,最全面详细,看完稳了
    java计算机毕业设计智慧物业管理系统源码+数据库+系统+部署+lw文档
    Nginx搭建RTMP流媒体服务器(Ubuntu18.04)
    Jmeter性能测试(压力测试)
    2.21每日一题(隐函数求导+变上限积分求导)
    基于STM32温湿度传感器采集报警系统设计
    多主复制下处理写冲突(4)-多主复制拓扑
    如何在 React 中创建多级下拉菜单
    KdMapper扩展实现之AVG(aswArPot.sys)
  • 原文地址:https://blog.csdn.net/cnds123/article/details/132914674