结构体类型数据作为函数参数(三种方法)
2013-10-16 09:33
465 查看
(1)用结构体变量名作为参数。
#include<iostream>
#include<string>
using namespace std;
struct Student{
string name;
int score;
};
int main(){
Student one;
void Print(Student one);
one.name="千手";
one.score=99;
Print(one);
cout<<one.name<<endl;
cout<<one.score<<endl;//验证 score的值是否加一了
return 0;
}
void Print(Student one){
cout<<one.name<<endl;
cout<<++one.score<<endl;//在Print函数中,对score进行加一
}
这种方式值采取的“值传递”的方式,将结构体变量所占的内存单元的内存全部顺序传递给形参。在函数调用期间形参也要占用内存单元。这种传递方式在空间和实践上开销较大,如果结构体的规模很大时,开销是很客观的。
并且,由于采用值传递的方式,如果在函数被执行期间改变了形参的值,该值不能反映到主调函数中的对应的实参,这往往不能满足使用要求。因此一般较少使用这种方法。
(2)用指向结构体变量的指针作为函数参数
#include<iostream>
#include<string>
using namespace std;
struct Student{
string name;
int score;
};
int main(){
Student one;
void Print(Student *p);
one.name="千手";
one.score=99;
Student *p=&one;
Print(p);
cout<<one.name<<endl;
cout<<one.score<<endl;//验证 score的值是否加一了
return 0;
}
void Print(Student *p){
cout<<p->name<<endl;
cout<<++p->score<<endl;//在Print函数中,对score进行加一
}
这种方式虽然也是值传递的方式,但是这次传递的值却是指针。通过改变指针指向的结构体变量的值,可以间接改变实参的值。并且,在调用函数期间,仅仅建立了一个指针变量,大大的减小了系统的开销。
(3)用接头体变量的引用变量作函数参数
#include<iostream>
#include<string>
using namespace std;
struct Student{
string name;
int score;
};
int main(){
Student one;
void Print(Student &one);
one.name="千手";
one.score=99;
Print(one);
cout<<one.name<<endl;
cout<<one.score<<endl;//验证 score的值是否加一了
return 0;
}
void Print(Student &one){
cout<<one.name<<endl;
cout<<++one.score<<endl;//在Print函数中,对score进行加一
}
实参是结构体变量,形参是对应的结构体类型的引用,虚实结合时传递的是地址,因而执行效率比较高。而且,与指针作为函数参数相比较,它看起来更加直观易懂。
因而,引用变量作为函数参数,它可以提高效率,而且保持程序良好的可读性。
您可能感兴趣的文章:
相关文章推荐
- 结构体类型数据作为函数参数(三种方法
- 结构体类型数据作为函数参数(三种方法)
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- SpringMVC Controller函数参数问题(就是作为方法的参数,以类名小写开头可以在JSP页面中获得该变量的数据 )
- 结构体类型数据作为函数参数
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- 结构体类型数据作为函数参数
- SQL中函数 replace 的参数1的数据类型ntext无效的解决方法
- C语言中将二维数组作为参数传递给函数的方法
- 指向函数的指针作为参数时的使用方法
- C++愤恨者札记1——类对象作为函数参数的数据传递过程
- 结构体作为函数形参(三种方法)
- Python网络编程调用recv函数完整接收数据的三种方法
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
- gridview的行号作为js函数参数的传递方法
- Kotlin语言学习之将函数作为参数传递,使用双冒号::引用其他方法
- C++愤恨者札记1——类对象作为函数参数的数据传递过程 http://blog.csdn.net/tms_li/article/details/7765626
- C++的三种传递参数到函数的方法:按值传递,用引用参数按引用传递,用指针参数按引用传递
- C语言中将二维数组作为参数传递给函数的方法
- 二维数组作为参数的函数定义及调用方法