C++结构体作为函数参数(值和引用)和返回值
来源:互联网 发布:风暴大陆进阶数据 编辑:程序博客网 时间:2024/06/05 11:27
结构作为参数
我们在前面的一些章节中知道,变量作为函数的参数,了解它是值传递还是地址传递是非常重要的。因为这意味着参数在函数体内的修改是否会影响到该变量本身。不同于数组,结构是按值传递的。也就是说整个结构的内容都复制给了形参,即使某些成员数据是一个数组。
下面,我们就以一个实例来证明这一点:(程序9.3.1)
#include "iostream.h"
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
void display(student arg);//结构作为参数
int main()
{
student s1={428004, "Tomato",20, "ComputerScience",84.5};//声明s1,并对s1初始化
cout <<"s1.name的地址" <<&s1.name <<endl;
display(s1);
cout <<"形参被修改后……" <<endl;
display(s1);
return 0;
}
void display(student arg)
{
cout <<"学号:" <<arg.idNumber <<"姓名:" <<arg.name <<"年龄:" <<arg.age <<endl <<"院系:" <<arg.department <<"成绩:" <<arg.gpa <<endl;
cout <<"arg.name的地址" <<&arg.name <<endl;
for (int i=0;i<6;i++)//企图修改参数的成员数据
{
arg.name[i]='A';
}
arg.age++;
arg.gpa=99.9f;
}
运行结果:
s1.name的地址0x0012FF54
学号:428004姓名:Tomato年龄:20
院系:ComputerScience成绩:84.5
arg.name的地址0x0012FED8
形参被修改后……
学号:428004姓名:Tomato年龄:20
院系:ComputerScience成绩:84.5
arg.name的地址0x0012FED8
通过上面这个程序,我们发现在函数中修改形参的值对实参是没有影响的。并且通过输出变量s1和参数arg的成员数据name所在地址,我们可以知道两者是不相同的,即整个name数组也复制给了参数arg。
如果我们希望能在函数修改实参,则可以使用引用的方法。由于结构往往整合了许多的成员数据,它的数据量也绝对不可小觑。使用值传递虽然能够保护实参不被修改,但是却会或多或少地影响到程序的运行效率。所以,一般情况下,我们选择引用传递的方法。
结构作为返回值
一般情况下,函数只能返回一个变量。如果要尝试返回多个变量,那么就要通过在参数中使用引用,再把实参作为返回值。然而,这种方法会导致一大堆参数,程序的可读性也较差。当结构出现以后,我们可以把所有需要返回的变量整合到一个结构中来,问题就解决了。我们通过一段程序来了解如何让函数返回一个结构:(程序9.3.2)
#include "iostream.h"
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
student initial();//初始化并返回一个结构
void display(student arg);
int main()
{
display(initial());//输出返回的结构
return 0;
}
void display(student arg)
{
cout <<"学号:" <<arg.idNumber <<"姓名:" <<arg.name <<"年龄:" <<arg.age <<endl <<"院系:" <<arg.department <<"成绩:" <<arg.gpa <<endl;
}
student initial()
{
student s1={428004, "Tomato",20, "ComputerScience",84.5};//初始化结构变量
return s1;//返回结构
}
运行结果:
学号:428004姓名:Tomato年龄:20
院系:ComputerScience成绩:84.5
- C++结构体作为函数参数(值和引用)和返回值
- 结构体变量作为函数的参数和返回值
- 结构体变量作为函数的参数和返回值 .
- C++引用(作为函数参数和返回值)
- 结构体作为参数和返回值原理
- “引用作为函数参数”与 “引用作为函数返回值”
- CArray作为函数参数和返回值
- Shader自学笔记1.2 结构体作为函数的参数和返回值
- 引用作为函数参数返回值
- c++引用作为参数和返回值小结
- Golang interface{} 作为函数参数和函数返回值例子
- 引用作为函数参数和常引用作为函数参数
- 5.5.2.1 函数作为参数值和返回值
- C++ 多维数组作为函数的返回值和参数
- 数组作为函数的参数和返回值
- js中函数可以作为参数和返回值
- 对象作为参数和返回值 复制(拷贝)构造函数
- c++引用和引用作为函数参数
- char数组存储中英文字符
- 13.删除单链表中重复的元素
- *** glibc detected *** double free or corruption (out) ***
- ActiveMQ使用笔记(二)ActiveMQ消息持久化(2)
- 黑马程序员____四种排序算法的比较分析
- C++结构体作为函数参数(值和引用)和返回值
- ActiveMQ使用笔记(二)ActiveMQ消息持久化(1)
- 重建asm
- 调试日志操作类
- ActiveMQ使用笔记(一)ActiveMQ的安装
- Exchange Server 2010,值得考虑的升级
- 重载、覆盖(重写)、隐藏(重定义)
- thinkphp技巧
- JSP如何做"正在加载数据,请稍等..."这样的提示页面 loding。。。