编写函数实现对两个变量的值进行交换

子函数的改变要想修改父函数的值,必须要:
1、传指针 2、解引用
#include <stdio.h>
void Swap_eer1(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
该函数采用值传递方式,是单向传递,实参变量和形参变量分别占用不同的存储单元,改变形参变量的值不会影响实参变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
该函数采用指针传递方式,在该函数中交换的是两个指针形参变量的值,而不是两个指针形参变量所指向的存储单元的值,因此不能影响父函数中变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
该函数采用指针传递方式,是双向传递。理论上能实现两个变量值的交换,但是该函数中应用了指针变量tmp所指向的存储单元作为中间变量,未对指针变量tmp进行初始化,tmp为野指针,它的值为随机值。若tmp指向系统区,改变tmp所指向存储单元的值,有可能造成系统混乱。因此,此函数的设计不可取。
#include <stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}

/*该函数采用指针传递方式,是双向传递,通过改变形参指针变量所指向的存储单元(即父函数中的变量)的值,从而影响父函数中变量的值,故该函数能实现了两个变量值的交换*/

int main()//调用函数,父函数
{
int a=10;
int b=20;
Swap(&a,&b);//被调用函数,子函数
printf("a=%d,b=%d\n",a,b);
return 0;
}

调试结果:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值