结构体类型数据作为函数参数(三种⽅法)
(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进⾏加⼀
}
实参是结构体变量,形参是对应的结构体类型的引⽤,虚实结合时传递的是地址,因⽽执⾏效率⽐较⾼。⽽且,与指针作为函数参数相⽐较,它看起来更加直观易懂。
因⽽,引⽤变量作为函数参数,它可以提⾼效率,⽽且保持程序良好的可读性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论