C语言再学习之:结构体引用为函数参数
来源:互联网 发布:羽毛球比赛抽签软件 编辑:程序博客网 时间:2024/06/05 15:50
结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
/*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/
/*结构体数组作为函数的参数,修改后的元素的成员值能返回到主调函数*/
/*结构体指针变量作为函数的参数,修改后的结构体成员的值能返回到主调函数*/
/*在主函数中分别调用上述函数修改成员值,再验证结果的正确性*/
【结构体参数调用归纳】
1)结构体变量作为函数参数[实参与形参]时,形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变。
2)结构体数组或结构体指针变量作为函数参数[实参与形参]时,形参结构体数组元素[或形参结构体指针变量指向的变量]成员值的改变将影响对应的实参构体数组[或实参结构体指针变量指向的变量]成员值的改变。
3)结构体变量可作为函数的参数,函数可返回一结构体类数据
4)p=&b; 使结构体指针变量p指向结构体变量b的空间。
p->num:表示通过指针变量引用结构体变量b的成员num
5)p=a;或p=&a[0];将结构体指针变量指向结构体数组a。则:
①p->num:表示通过指针变量引用结构体数组元素的成员num的值。
②p->num++:表示通过指针变量先引用结构体数组元素的成员num的值,再使该元素的成员num的值加 1,先引用其值然后其加1。
③++p->num:表示使指向的元素的成员num的值加1,再引用其值。
6)p=a;或p=&a[0];表示将结构体指针变量p指向结构体数组a。
①(p++)->num:表示通过指针变量先引用结构体数组元素 的成员num的值,再使指针变量本身加1,指针变量加1表示使指针变量指向结构体数组的下一个元素。
②(++p)->num:先使指针变量本身加1,先使使指针变量指向结构体数组的下一个元素,然后引用指针变量所指向的结构体数组元素的成员num的值。
结构体变量作为函数的形式参数实验总结
结构体变量作为函数参数传递的3种方法
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
用结构体变量名作参数。一般较少用这种方法。
用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
用结构体变量的引用变量作函数参数。
下面通过一个简单的例子来说明,并对它们进行比较。
【例7.5】有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。
在print函数中输出p所指向的结构体变量的各个成员值,它们也就是stu的成员值。在main函数中也可以不定义指针变量pt,而在调用print函数时以&stu作为实参,把stu的起始地址传给实参p。
图7.10
程序(1)用结构体变量作实参和形参,程序直观易懂,效率是不高的。
程序(2)采用指针变量作为实参和形参,空间和时间的开销都很小,效率较高。但程序(2)不如程序(1)那样直接。
程序(3)的实参是结构体Student类型变量,而形参用Student类型的引用,虚实结合时传递的是stu的地址,因而效率较高。它兼有(1)和(2)的优点。
引用变量主要用作函数参数,它可以提高效率,而且保持程序良好的可读性(引用'&'是C++的新特性)。在本例中用了string方法定义字符串变量,在某些C++系统中目前不能运行这些程序,读者可以修改程序,使之能在自己所用的系统中运行。
- C语言再学习之:结构体引用为函数参数
- C/C++学习之C提高-----结构体定义、初始化、引用、结构体做函数参数、结构体数组、结构体中套一级/二级指针、结构体深copy和浅copy
- C语言基础知识之(十二):结构体作为函数的参数(结构体变量、结构体数组)
- c语言不支持函数引用传递参数
- 菜鸟学习-C语言函数参数传递详解-结构体与数组
- 【C语言提高37】结构体元素做函数参数与结构指针做函数参数
- C语言用结构体指针作函数参数
- C语言用结构体指针作函数参数
- C语言用结构体指针作函数参数
- C语言结构体指针变量作函数参数
- C语言结构体指针变量作函数参数
- C语言结构体及函数传递数组参数示例
- 【C语言提高37】结构体做函数参数进阶
- c语言结构体成员作为函数参数
- C语言学习之结构体
- C语言学习之结构体struct
- C语言学习之结构体等
- C语言之结构体学习笔记
- ROS下相机标定
- I2C协议学习笔记
- CodeForces Gym101550E Exponial
- Netty4.x中文教程系列(五)编解码器Codec
- 注解方式增强(实现登录日志录入数据库)(前置增强+后置增强)
- C语言再学习之:结构体引用为函数参数
- idea:用maven、Spring+SpringMVC写HelloWorld
- js ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'
- 解决masm在64位windows版本不兼容无法运行
- 隐藏参数跳转页面
- linux让flume在后台运行
- leetcode Combination Sum
- JSON传数组对象到后台的过程和接收(TP框架)
- 百度地图开发Marker|Polyline隐藏或显示