C语言 指针变量作为函数参数

1.函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型。
指针变量作为函数参数的作用:将一个变量的地址传送到另一个函数中。
【例题】
输入a和b两个整数,按先大后小的顺序输出a和b,用函数处理,而且用指针类型的数据作函数参数。
【思路】
定义一个Swap函数,将指向两个整型变量的指针变量(内放两个整型变量的地址)作为实参传递给Swap函数的形参指针变量,在函数中通过指针实现交换两个变量的值。
【代码】

void Swap(int *p1,int*p2)//定义Swap函数
{
	int tmp;
	tmp=*p1;           //使*p1和*p2交换
	*p1=*p2;
	*p2=tmp;
}
int main()
{
	int a,b;
	printf("请输入a和b:\n");
	scanf("%d%d",&a,&b);
	int *b1,*b2;  //定义两个int*型指针变量
	b1=&a;  //使b1指向a
	b2=&b;  //使b2指向b
	if(a<b)  //如果a<b
	Swap(b1,b2);  //调用Swap函数
	printf("Max=%d,Min=%d",a,b);  //输出结果
	return 0;
}

【运行结果】
请添加图片描述
【程序分析】
Swap是用户自定义函数,它的作用是交换两个变量(a和b)的值。Swap函数的两个形参p1和p2是指针变量。注意实参b1和b2是指针变量,在函数调用时,将实参变量的值传送给形参变量,采取的依然是“值传递”的方法。因此虚实结合后形参p1的值为&a,p2的值为&b,如下图:
请添加图片描述
这时,p1和b1都指向变量a,p2和b2都指向变量b。接着执行Swap函数的函数体,使*p1*p2的值互换,也就是a和b的值互换,互换后的情况如下图:
请添加图片描述
函数调用结束后,形参p1和p2不复存在(已释放),如图:
请添加图片描述
最后在main函数中输出的a和b的值已经是交换过的值(a=9,b=5)。
【注意】
若把Swap函数写成这样则是错误的。如下:

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

*p1就是a,是整型变量。而*tmp是指针变量tmp所指向的变量。由于未给tmp赋值,因此tmp中并无确定的值,所以tmp所指向的单元也是不可预见的。所以,对*tmp赋值就是向一个未知的存储单元赋值,而这个未知的存储单元中可能存储着一个有用的数据,这样就有可能破坏系统的正常工作。应该将*p1的值赋给与*p1相同类型的变量,在上例中,用整型变量tmp,作为临时辅助变量实现*p1*p2的交换。
这个例题采取的方法是交换a和b的值,而p1和p2的值不变。
为了使在函数中改变了的变量值能被主函数main所用,应该用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,从而实现了“通过调用函数使变量的值发生变化,在主调函数中可以使用这些改变了的值”的目的。
如果想通过函数调用得到n个要改变的值,可以这样做:
①在主调函数中设n个变量,用n个指针指向它们;
②设计一个函数,有n个指针形参。在这个函数中改变这n个形参的值;
③在主调函数中调用这个函数,在调用时将这n个指针变量作实参,将它们的值,也就是相关变量的地址传给该函数的形参;
④在执行该函数过程中,通过形参指针变量,改变它们所指向的n个变量的值;
⑤主调函数中就可以使用这些改变了的值的变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值