首页 理论教育 C语言程序设计:指针作为函数参数

C语言程序设计:指针作为函数参数

时间:2026-01-26 理论教育 浅陌 版权反馈
【摘要】:当用指针变量作为函数参数时,要求形参与实参是相同类型的指针变量。输入两个整数,按从大到小的顺序输出,用指针作为函数参数来实现。指针变量pl 和p2在被调函数中无效,图中用虚线表示。图9.3交换示意图C语言中实参变量和形参变量之间的数据传递是单向的"值传递"方式,指针变量作为函数参数也要遵循这一规则。调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

函数的参数不仅可以是整型、实型、字符型等,还可以是指针类型。用指针作为函数参数,实参与形参间传递的是地址值,可以实现"双向"传递。当用指针变量作为函数参数时,要求形参与实参是相同类型的指针变量。

【例9.2】编写函数myadd(int*a,int*b),函数中把指针变量a和b所指的存储单元中的两个值相加,然后将和值作为函数值返回。在主函数中输入两个整数赋给变量,把变量的地址作为实参,传送给对应的形参。

程序代码:

图示

图示

运行结果:

图示

程序讲解:

在本例程序中,主函数调用myadd函数时,系统为myadd函数的形参指针a,b开辟两个基类型为int 类型的临时变量,并通过实参指针p和q 把x,y的地址传送给它们。这时,指针变量a指向x,指针变量b指向y。然后程序的流程转去执行myadd函数。

【例9.3】输入两个整数,按从大到小的顺序输出,用指针作为函数参数来实现。

程序代码:

图示

运行结果:

图示(https://www.xing528.com)

程序讲解:

本程序中,实参指针变量pl 与形参指针变量ql 指向同一地址,即均指向&a;实参指针变量p2与形参指针变量q2指向同一地址,即均指向&b。所以*p1与*q1都相当于变量a,*p2与*q2都相当于变量b,交换指针变量所指变量值时,指针并没有发生变化。

思考:例9.2 是通过交换两指针变量所指变量的值,来实现从大到小排序的功能,程序运行结果是a 和b 两个变量按从大到小排序。如果要求用交换两个指针变量来实现排序,结果会怎样呢?

【例9.4】企图通过改变指针形参的值来改变指针实参的值。

程序代码:

图示

运行结果:

图示

程序讲解:

在函数内,交换两个指针变量的值,由显示结果可知,已实现从大到小排序功能。但是形参不能将结果反过来传给实参,虽然ql 和q2 的值已交换,但不会影响pl 和p2 的值,也不会影响变量a 和b 的值,所以在主函数中输出变量a 和b 的值,并没有按从大到小排序。其交换过程如图9.3所示。指针变量pl 和p2在被调函数中无效,图中用虚线表示。

图示

图9.3 交换示意图

C语言中实参变量和形参变量之间的数据传递是单向的"值传递"方式,指针变量作为函数参数也要遵循这一规则。调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈