有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出

        将一个结构体变量中的数据传递给另一个函数,有下面3种方法:
        (1)用结构体变量名作参数。例如,用结构体变量stu作函数实参,将实参值传给形参。用结构体变量作实参时,采取的是"值传递"的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须是同类型的结构体变量。在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大,如果结构体的规模很大时,开销是很可观的。此外,由于采用值传递方式,如果在执行被调用函数期间改变了形参(是结构体变量)的值,该值不能返回主调函数,这往往不能满足使用要求。因此一般较少用这种方法。

编写程序:


        (2)用指向结构体变量的指针作实参,将结构体变量的地址传给形参。请注意程序注释。

编写程序:

        此程序在定义结构体变量stu时赋初值,这样程序可简化些。print函数中的形参p被定义为指向Student类型数据的指针变量。在main函数中定义指针变量pt,并将stu的起始地址赋给pt,这样pt就指向stu。调用print函数时,实参指针变量pt将stu的起始地址传送给形参p(p也是基类型为student的指针变量)。这样形参p也就指向stu。在print函数中输出p所指向的结构体变量的各个成员值,也就是stu的成员值。
        在main函数中也可以不定义指针变量pt,而在调用print函数时以&stu作实参,把stu的起始地址传给实参p。
        (3)用结构体变量的引用作函数形参,它就成为实参(是结构体变量)的别名。

编写程序:

运行结果:

        3种方法的比较:
        程序(1)用结构体变量作实参和形参,程序直观易懂,但是在调用函数时形参要单独开辟内存单元。实参中全部内容通过值传递方式一一传给形参,如果结构体变量占的存储空间很大,则在虚实结合时空间和时间的开销都比较大,效率不高的。

        程序(2)采用指针变量作为实参和形参,在调用函数时形参只占用4字节,实参只是
将stu的起始地址传给形参,而不是将结构体变量的各成员的值一一传给形参,因而空间和时间的开销都很小,效率较高。但看程序时不如程序(1)那样直观。
        程序(3)的实参是结构体Student类型变量,而形参用Student类型的引用,虚实结合时传递的是stu的地址,因而效率较高。在执行print函数期间,实参stu和形参stud代表同一对象,stu.num就是stud.num,程序比较直观易懂,它兼有(1)和(2)的优点。
        通过本例可以体会到C++为什么要增设变量的引用。引用主要用作函数参数,它可以提高效率,而且保持程序良好的可读性。在面向对象的程序设计中会用到这种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值