C++一般有两种传递方式:一种是按值传递,另一种是按引用传递。

结构体和共用体是按值传递。每个元素都会生成相应副本,再将副本传递给形参。对于这一点结构体和数组不一样,虽然​数组本质上也是按值传递,但是数组传递的是一个元素的首地址,其它元素并没有传递到函数里。

#include

using namespace std;

struct student

{

char name[20];

int age;

char sex;

int grade;

}ss={"old name",18,'n',88};

 

void changedata1(student stu);

void changedata2(student &stu);

void changedata3(student *stu);

 

void main (void)

{

cout<<"更改前:"<<endl;

cout<<ss.name<<'\t'<<ss.age<<'\t'<<ss.sex<<'\t'<<ss.grade<<endl;

 

changedata1(ss);

cout<<"changedata1更改后:"<<endl;

cout<<ss.name<<'\t'<<ss.age<<'\t'<<ss.sex<<'\t'<<ss.grade<<endl;

 

changedata2(ss);

cout<<"changedata2更改后:"<<endl;

cout<<ss.name<<'\t'<<ss.age<<'\t'<<ss.sex<<'\t'<<ss.grade<<endl;

changedata3(&ss);

cout<<"changedata3更改后:"<<endl;

cout<<ss.name<<'\t'<<ss.age<<'\t'<<ss.sex<<'\t'<<ss.grade<<endl;

 

}

void changedata1(student stu)

{

strcpy(stu.name,"new name1");

stu.age=28;

stu.sex='m';

stu.grade=100;

cout<<"changedata1(student stu)更改中"<<endl;

cout<<stu.name<<'\t'<<stu.age<<'\t'<<stu.sex<<'\t'<<stu.grade<<endl;

}

 

void changedata2(student &stu)

{

strcpy(stu.name,"new name2");

stu.age=38;

stu.sex='f';

stu.grade=90;

cout<<"changedata2(student &stu)更改中"<<endl;

cout<<stu.name<<'\t'<<stu.age<<'\t'<<stu.sex<<'\t'<<stu.grade<<endl;

}

void changedata3(student *stu)

{

strcpy(stu->name,"new name3");

stu->age=48;

stu->sex='m';

stu->grade=80;

cout<<"changedata2(student *stu)更改中"<<endl;

cout<<stu->name<<'\t'<<stu->age<<'\t'<<stu->sex<<'\t'<<stu->grade<<endl;

}


C++进阶 -函数参数传递

相关文章: