函数,结构体中引用传递、地址传递可改变实参,值传递不会改变实参。
void swap01(int a,int b)/*值传递*/
{
int temp=a;
a=b;
b=temp;
}
void swap02(int *p1,int *p2)/*地址传递*/
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
void swap03(int &a1,int &b1)
{
int temp=a1;
a1=b1;
b1=temp;
}
int main()
{
int a=10;
int b=20;
swap01(a,b);
swap02(&a,&b);
swap(a1,b1);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"a1="<<a1<<endl;
cout<<"b1="<<b1<<endl;
system("pause");
return 0;
}
#include<iostream>
using namespace std;
#include<string>
struct student{
string name;
int age;
int score;
};
void printstudent1(struct student s)
{
s.age=20;//此时输出学生年龄1为20,主函数中学生年龄输出18
cout<<"学生名称:"<<s.name<<"学生年龄1:"<<s.age<<"学生分数:"<<s.score<<endl;
}
void printstudent2(struct student *p)
{
p->age=30;
cout<<"学生名称:"<<p->name<<"学生年龄2:"<<p->age<<"学生分数:"<<p->score<<endl;//此时输出学生年龄2为30,主函数中学生年龄输出30
}
int main()
{
struct student s;
s.name="liu";
s.age=18;
s.score=80;
printstudent1(s);//输出学生信息(值传递)
printstudent2(&s);//输出学生信息(地址传递)
cout<<"学生名称:"<<s.name<<"学生年龄:"<<s.age<<"学生分数:"<<s.score<<endl;
system("pause");
return 0;
}