将一个结构体变量中的数据传递给另一个函数

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

下面通过一个简单的例子来说明,并对它们进行比较。

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

1) 用结构体变量作函数参数。

    
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. struct Student//声明结构体类型Student
  5. {
  6. int num;
  7. char name[20];
  8. float score[3];
  9. };
  10. int main( )
  11. {
  12. void print(Student); //函数声明,形参类型为结构体Student
  13. Student student; //定义结构体变量
  14. student.num=12345; //以下5行对结构体变量各成员赋值
  15. student.name="Li Fung";
  16. student.score[0]=67.5;
  17. student.score[1]=89;
  18. student.score[2]=78.5;
  19. print(student); //调用print函数,输出stu各成员的值
  20. return 0;
  21. }
  22. void print(Student student)
  23. {
  24. cout << stdent.num << " "<< student.name <<" "<< student.score[0]
  25. <<" " << student.score[1]<<" "<< student.score[2]<< endl;
  26. }
运行结果为:
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];
    }student={12345,"Li Fung",67.5,89,78.5}; //定义结构体student变量stu并赋初值
    int main( )
    {
       void print(Student *); //函数声明,形参为指向Student类型数据的指针变量
       Student *pt=&student; //定义基类型为Student的指针变量pt,并指向stu
       print(pt); //实参为指向Student类数据的指针变量
       return 0;
    }

     
    //定义函数,形参p是基类型为Student的指针变量
    void print(Student *student)
    {
       cout<<student->num<<" "<<student->name<<" "<<student->score[0]<<" " <<
       student->score[1]<<" "<<student->score[2]<<endl;
    }


调用print函数时,实参指针变量pt将stu的起始地址传送给形参p(p也是基类型为student的指针变量)。这样形参p也就指向stu,见图7.10。

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

    #include <iostream>
    #include <string>
    using namespace std;
    struct Student
    {
       int num; string name; //用string类型定义字符串变量
       float score[3];
    }student={12345,"Li Fung",67.5,89,78.5}; //定义结构体student变量并赋初值

    int main( )
    {
       void print(Student *); //函数声明,形参为指向Student类型数据的指针变量
       Student *pt=&student; //定义基类型为Student的指针变量pt,并指向stu
       print(pt); //实参为指向Student类数据的指针变量
       return 0;
    }

     
    //定义函数,形参p是基类型为Student的指针变量
    void print(Student &student)
    {
       cout << student.num << " " << student.name << " " << student.score[0] << " " <<
       student.score[1] << " " << student.score[2] <<endl;
    }




版权声明:本文为mingpingzhang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。