不使用第三个值,来进行两个值的交换

学习C语言的时候,常常会遇到这样一个问题:写出一个函数,交换a与b的值。通常初学者都会使用第三个值作为媒介,来进行两个值得交换。就好比一个人将装牛奶的瓶子和装啤酒的瓶子,通过一个空瓶子来将两种个瓶子中的液体进行交换。
源代码如下:
#include
void Change(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int a=10;
int b=20;
Change(a,b);
printf("%d,%d\n",a,b);
}
在这里插入图片描述
这样写你会发现a,b的值并没有发生交换,那是因为此处为值传递,被调函数Change中交换了a和b的值,并未交换主函数中a,b的值,所以a和b输出结果仍然为a=10,b=20;如果这时你将printf函数写在Change函数中,就会发现值又交换了,这就是假象。
正确的写法应为
#include
void Change(int *a,int *b)
{
int tmp=0;
tmp=*a;
*a=*b;
*b=tmp;
}
int main()
{
int a=10;
int b=20;
printf("%d,%d\n",a,b);
Change(&a,&b);
printf("%d,%d\n",a,b);
}

为了避免犯以上错误,我采用以下方法来实现不运用第三个数来解决交换问题。
#include
void Change(int a,int b)
{
a=a+b;
b=a-b;
a=a-b;
}
int main()
{
int a=10;
int b=20;
Change(a,b);
printf(”%d,%d\n“,a,b);
}
经过查找资料得知在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。
从结果可以看出,a、b 的值并没有发生改变,交换失败。这是因为 change() 函数内部的 a、b 和 main() 函数内部的 a、b 是不同的变量,占用不同的内存,它们除了名字一样,没有其他任何关系,change() 交换的是它内部 a、b 的值,不会影响它外部(main() 内部) a、b 的值。

通过指针变量就可以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值