发布日期:2015-12-22 15:51 来源: 标签: 编程语言 C++教程 C++结构体变量 C++指针引用结构
本章我们主要学习C++中将一个结构体变量中的函数数据传递给另一个函数的方法,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
1) 用结构体变量名作参数。一般较少用这种方法。 
2)用指向结构体变量的指针作实参,将结构体变量的地址传给形参。 
3)用结构体变量的引用变量作函数参数。
下面通过一个简单的例子来说明,并对它们进行比较。
有一个结构体变量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};
int main( )
{
void print(Student &);  //函数声明,形参为Student类型变量的引用 
print(stu); //实参为结构体Student变量
return 0; 
}
//函数定义,形参为结构体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++系统中目前不能运行这些程序,读者可以修改程序,使之能在自己所用的系统中运行。



相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。