将一个结构体变量中的数据传递给另一个函数
2014-08-31 01:53
274 查看
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
用结构体变量名作参数。一般较少用这种方法。
用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
用结构体变量的引用变量作函数参数。
下面通过一个简单的例子来说明,并对它们进行比较。
【例7.5】有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。
1) 用结构体变量作函数参数。
运行结果为:
12345 Li Fung 67.5 89 78.5 (2)
2)用指向结构体变量的指针作实参在上面程序的基础上稍作修改即可。
调用print函数时,实参指针变量pt将stu的起始地址传送给形参p(p也是基类型为student的指针变量)。这样形参p也就指向stu,见图7.10。
在print函数中输出p所指向的结构体变量的各个成员值,它们也就是stu的成员值。在main函数中也可以不定义指针变量pt,而在调用print函数时以&stu作为实参,把stu的起始地址传给实参p。
用结构体变量名作参数。一般较少用这种方法。
用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
用结构体变量的引用变量作函数参数。
下面通过一个简单的例子来说明,并对它们进行比较。
【例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; }
#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; }
#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。
相关文章推荐
- 一个函数调用另一个函数,最好用参数传递。不然就得声明为全局变量。被调用的函数里边,变量前面写 global
- 关于函数中传递地址值和结构体的一个小程序
- 无法把指针变量本身传递给一个函数
- lambda的常见用法:传递一个函数的结果作为另一个函数的参数
- 一个Activity给另一个Activity传递数据
- 在一个js函数里面获取另一个js函数的变量
- Android小例子(点击一个按钮,传递数据给另一个页面)
- 在JS中一个function函数要调用另一个函数里的变量。
- 一个可以不传参数就可以在函数中改变调用者内部的变量数据的函数
- 一个函数使用另一个函数中的变量
- 无法把指针变量本身传递给一个函数的解决方法
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 无法把指针变量本身传递给一个函数
- 一个类里的struct 对象,怎么样传递给另一个类,且数据保留
- 将整个结构体作为一个参数传递给函数
- 简化版定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数.参数是此结构体类型的变量,返回值是整数
- 无法把指针变量本身传递给一个函数
- 一个通过回车键调另一个数据窗口相关数据到主窗口的函数
- 写一个函数交换两个结构体变量