1、结构体指针(访问符号为->)
通过指针指向结构体变量,通过指针访问结构体变量中的数据。
首先定义结构体变量。
`//结构体指针
//通过指针访问结构体中的成员;利用操作符->可以通过结构体指针访问结构体属性
//定义学生结构体
struct student
{
string name;
int age;
int score;
};
//在main函数中
//1、创建结构体变量
struct student s = {"张三",18,100};//可以省略struct
//2、通过指针指向结构体变量
struct student*p = &s;
//3、通过指针访问结构体变量中的数据
//注意当指针指向结构体数组时,不用&和->,而是直接使用变量名
cout << p->name << p->age << p->score << endl;
2、结构体做函数参数有两种传递方式:值传递和地址传递
还是要先定义结构体并创建结构体变量,具体代码如1中所示:
//值传递
void printStudent1(struct student s1)
{
s1.age = 100;main函数中的值不会被改变
cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score;
}
//地址传递
void printStudent2(struct student *p)
{
p->age = 200;//main函数中的值会被改变
cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score;
}
//在main函数中调用
printStudent1(s);//值传递
//s是数据类型student的一个变量,并不是数组名,所以要加取地址符&
printStudent2(&s);//地址传递
3、指针和函数
利用指针做函数参数,可以修改实参的值。
//利用指针做函数参数,可以修改实参的值
void swap1(int*p, int*s)
{
int temp = *p;
*p = *s;
*s = temp;
}
在main函数中调用,a和b的值会改变,相当于地址传递
int a = 10;
int b = 20;
swap1(&a, &b);
cout<<a;//20
cout<<b;//10