指针变量作为函数参数

函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型的数据。下面分析指针变量作为函数参数的优势。
例子:编写函数实现对两个变量的值进行传递。
函数1:

void Swap1(int a,int b)
{
	int tmp=a;
	a=b;
	b=tmp;
}

int main()
{
	int a=10;
	int b=20;
	Swap(a,b);
	printf("%d,%d\n",a,b);
	return 0;
}

在这里插入图片描述
说明:该函数采用值传递方式,如上图,在main函数中的实参变量a,b和Swap1中的形参变量a,b分别占用不同的存储单元,该Swap1中改变了形参变量的值但并不会影响实参变量的值,所以该函数不能实现对两个变量值的交换。
函数2:

void Swap2(int *p1,int *p2)
{
	int *tmp=p1; 
	p1=p2;
	p2=tmp;
}

int main()
{
	int a=10;
	int b=20;
	Swap2(&a,&b);
	printf("%d,%d\n",a,b);
	return 0;
}

在这里插入图片描述

在这里插入图片描述
说明:函数Swap2的两个形参p1、p2是指针变量,主函数调用时将a和b的地址分别赋给int *变量p1、p2,但在函数中p1、p2未被解引用,所以只是完成了p1、p2值的交换,并不能通过该函数实现对两个变量的交换。
函数3:

void Swap3(int *p1,int *p2)
{
	int *tmp;
	*tmp=*p1;      //此语句有问题
	*p1=*p2;
	*p2=*tmp;
}

说明:*p就是a,是整形变量,而 * tmp是指针变量tmp所指向的变量。但我们并没有给tmp赋值,tmp中没有确定的值,因此tmp所指向的单元也是不可预见的。所以,对 * tmp赋值就是向一个未知的存储单元赋值,而这个未知的存储单元可能存储着一个有用的数据,这样就有可能破坏系统的正常工作状态。我们把这样没有访问权限的指针(地址)的指针称为野指针或悬挂指针。
函数4:

void Swap4(int *p1,int *p2)
{
	int tmp;
	tmp=*p1;
	*p1=*p2;
	*p2=tmp;
}

在这里插入图片描述
说明:该函数在Swap3的基础上,将 * p1的值赋给与 * p1相同的数据类型,即用整型变量tmp作为临时辅助变量实现了* p1和* p2的交换。
在这里插入图片描述

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值