理论教育 C语言程序设计:指针变量作函数参数

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

时间:2023-10-20 理论教育 版权反馈
【摘要】:数值只能从调用函数向被调用函数传递,不能反过来传递,形参值的改变不会反过来影响实参值的改变。例7.3就试图用一个被调用函数实现主调函数中变量值的改变,但这是无法实现的。使用指针参数将改变带回到调用函数。swap()的参数是两个指向整型变量的指针变量,所以主函数在调用时必须使用&i、&j来传递参数。综合案例引入和本节C语言指针及指针变量相关知识,理解和掌握各种数据在计算机中的存储及运算方式。

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

1.问题的提出

函数的参数不仅可以是整型、实型和字符型,还可以是指针类型。当是指针类型时,它的作用是将一个变量地址传送到另一个函数中。在C语言中,函数参数的传递单向值传递。数值只能从调用函数向被调用函数传递,不能反过来传递,形参值的改变不会反过来影响实参值的改变。例7.3就试图用一个被调用函数实现主调函数中变量值的改变,但这是无法实现的。

【例7.3】试图交换变量值的程序。

程序如下:

运行结果:

此例中,i和j的值正确传入了swap()中,a和b是swap()的两个形参。a和b的值是由i和j复制得到的,是i和j的一个副本。在swap()调用返回时,a和b两个形参的生命周期结束,但它们的值并没有被复制到实参i和j中。因此,一旦返回,i和j的值将保持不变,swap()的交换功能也没得到体现。

2.解决方法

解决问题的方法是用指针作为函数参数,传给swap()的应是想交换的两个变量的地址,而地址可用指针来刻画。

【例7.4】使用指针参数将改变带回到调用函数。

程序如下:

运行结果:

before calling:i=253 j=86

in the function swap:*a=86 *b=253

after calling:i=86 j=253

该例使用指针作为参数,函数改变参数的值后,能将改变带回到调用函数。swap()的参数是两个指向整型变量的指针变量,所以主函数在调用时必须使用&i、&j来传递参数。

传入函数的实参i和j的地址被复制给swap()的形参a和b,a和b也是指针。在swap()里,改变的不是a和b的值,而是*a和*b的值。*运算符可以得到指针所指向内存空间的内容。*a取得的是存在a中的地址的值,现在a中存储的地址是i的地址,因此*a在本程序中等价于i。同样的道理,*b等价于j。函数将i和j的内容交换,当返回值后,&i和&j的值(地址)仍不变,而i和j的值却改变了。

提示:

①在调用函数时千万注意参数的类型,如果是指针,务必要传地址,否则后果不可预料。

②不能通过改变指针形参的值而使指针实参的值改变。如下代码,就不能实现以上结果。

3.程序实例

【例7.5】输入a、b、c这3个数,按由大到小的顺序输出。

程序如下:

运行结果:

这里限定了swap、exchange的返回类型是void,因此要得到输出值就必须传递三个数值的地址。总之,若希望通过函数调用改变一个或多个变量的值,可以采用传送相应变量的地址的方法。

综合案例引入和本节C语言指针及指针变量相关知识,理解和掌握各种数据在计算机中的存储及运算方式。总结如下:(www.daowen.com)

1.每天都有目标,且当日事当日毕。即每天都要有计划,对当天发生的各种问题,在当天弄清原因,分清责任,及时采取措施进行处理,防止问题积累。

2.分散、平衡处理事情。如果感觉事情太多,就将事情分成自己能处理的零散事情,且权重平衡,分清轻重缓急,最终完成任务。

1.变量的指针,其含义是指该变量的(  )。

A.值        B.地址       C.名       D.一个标志

2.若有定义:int x,*pb;则以下正确的表达式是(  )。

A.pb=&x B.pb=x C.*pb=&x D.*pb=*x

3.以下程序的输出结果是(  )。

A.因变量无定义输出不定值 B.0

C.-1 D.1

4.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是(  )。

A.a,point,*&a B.&*a,&a,*point

C.*&point,*point,&a D.&a,&*point,point

5.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是(  )。

A.*p表示的是指针变量p的地址

B.*p表示的是变量a的值,而不是变量a的地址

C.*p表示的是指针变量p的值

D.*p只能用来说明p是一个指针变量

6.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是(  )。

A.23 B.24 C.25 D.26

7.有以下程序

程序运行后的输出结果是(  )。

A.1,2,1,2 B.1,2,2,1 C.2,1,2,1 D.2,1,1,2

8.图7-3为本学期汽车制造类专业同学的课表,请同学们结合本节课所学指针内容,帮他们编写一个程序,通过输入星期和节次,输出课表中所对应的课程名及授课地点等信息。

图7-3 汽车制造类专业课表

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

我要反馈