使两个参数的实际值交换的函数/方法

文章讨论了在编程中如何通过函数交换两个变量的值,解释了为何直接传递变量给函数无法实现交换,因为函数接收的是变量的副本。在C/C++中,使用指针可以解决这个问题,而在Java中,由于没有指针,但可以通过引用数据类型的特性来交换对象的字段。对于基本数据类型,Java中没有直接的方法,但可以通过数组变相实现,不过这在实际开发中并不常见。
摘要由CSDN通过智能技术生成

在编写代码时,我们有时会遇到交换两个变量的值的需求,很容易产生这样的想法:能不能将交换变量的值的逻辑提出来,成为一个单独的函数呢?

错误示例:

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

int main() {
    int x = 10;
    int y = 20;

    swap1(x, y);
    
    printf("x = %d\n", x);
    printf("y = %d\n", y);
    return 0;
}

输出结果: 

x = 10

y = 20

为什么交换无效呢?

原因是,当实参传递给形参时,实际上形参是实参的一个临时拷贝,即与实参不同的另外一个值(但字面值相同),对形参的一系列操作无法作用到实参上,自然无法达到交换两个实参的效果。 

C / C++ 中,可以使用指针来实现交换两个参数的函数:

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

int main() {
    int x = 10;
    int y = 20;

    swap2(&x, &y);
    
    printf("x = %d\n", x);
    printf("y = %d\n", y);
    return 0;
}

输出结果:

x = 20

y = 10

Triumph! :)

而在 Java 中,由于没有指针的概念,因此直接无法写出交换两个基本数据类型的变量的方法(Method). 而对于引用数据类型,由于传入参数实际为对象的引用,所以可以轻松做到对实际对象的某些字段进行交换。

事实上,使用数组作为参数可以变相做到对两个基本数据类型的变量的值进行交换的操作,详见https://www.zhihu.com/question/515961668/answer/2362079738;但说实话这样过于繁琐,实际开发中并不常见。

↑ 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值