在C++中结构体为函数参数的例子

将一个结构体变量中的数据传递给另一个函数,有下列3种方法: 
1.用结构体变量名作参数。一般较少用这种方法。
2.用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
3.用结构体变量的引用变量作函数参数。

下面通过一个简单的例子来说明,并对它们进行比较。
例7.5 有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。

(1) 用结构体变量作函数参数
#include <iostream>
#include <string>
using namespace std;
struct Student//声明结构体类型Student
{
   int num;
   char name[20];
   float score[3];
};
int main( )
{
   void print(Student);//函数声明,形参类型为结构体Student
   Student stu;//定义结构体变量
   stu.num=12345;//以下5行对结构体变量各成员赋值
   stu.name=″Li Fung″;
   stu.score[0]=67.5;
   stu.score[1]=89;
   stu.score[2]=78.5;
   print(stu);//调用print函数,输出stu各成员的值
   return 0;
}
void print(Student st)
{
   cout<<st.num<<″ ″<<st.name<<″ ″<<st.score[0]
   <<″ ″ <<st.score[1]<<″ ″<<st.score[2]<<endl;
}
运行结果为
12345 Li Fung 67.5 89 78.5 (2)

(2)用指向结构体变量的指针作实参在上面程序的基础上稍作修改即可。
#include <iostream>
#include <string>
using namespace std;
struct Student
{
   int num; string name;//用string类型定义字符串变量
   float score[3];
}stu={12345,″Li Fung″,67.5,89,78.5};//定义结构体student变量stu并赋初值
int main( )
{
   void print(Student *);//函数声明,形参为指向Student类型数据的指针变量
   Student *pt=&stu;//定义基类型为Student的指针变量pt,并指向stu
   print(pt);//实参为指向Student类数据的指针变量
   return 0;
}

//定义函数,形参p是基类型为Student的指针变量
void print(Student *p)
{
   cout<<p->num<<″ ″<<p->name<<″ ″<<p->score[0]<<″ ″ <<
   p->score[1]<<″ ″<<p->score[2]<<endl;
}
调用print函数时,实参指针变量pt将stu的起始地址传送给形参p(p也是基类型为student的指针变量)。这样形参p也就指向stu,见图7.10。

在print函数中输出p所指向的结构体变量的各个成员值,它们也就是stu的成员值。在main函数中也可以不定义指针变量pt,而在调用print函数时以&stu作为实参,把stu的起始地址传给实参p。

图7.10

(3) 用结构体变量的引用作函数参数
#include <iostream>
#include <string>
using namespace std;
struct Student
{
   int num;
   string name;
   float score[3];
}stu={12345,″Li Li″,67.5,89,78.5};

void main( )
{
   void print(Student &);
   //函数声明,形参为Student类型变量的引用
   print(stu);
   //实参为结构体Student变量
}

//函数定义,形参为结构体Student变量的引用
void print(Student &stud)
{
   cout<<stud.num<<″ ″<<stud.name<<″ ″<<stud.score[0]
   <<″ ″ <<stud.score[1]<<″ ″<<stud.score[2]<<endl;
}

程序(1)用结构体变量作实参和形参,程序直观易懂,效率是不高的。
程序(2)采用指针变量作为实参和形参,空间和时间的开销都很小,效率较高。但程序(2)不如程序(1)那样直接。
程序(3)的实参是结构体Student类型变量,而形参用Student类型的引用,虚实结合时传递的是stu的地址,因而效率较高。它兼有(1)和(2)的优点。

引用变量主要用作函数参数,它可以提高效率,而且保持程序良好的可读性。在本例中用了string方法定义字符串变量,在某些C++系统中目前不能运行这些程序,读者可以修改程序,使之能在自己所用的系统中运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值