结构体
- 结构体指针
作用:通过指针访问结构体中的成员
利用操作符->可以通过结构体指针访问结构体属性。
#include<stdio.h>
struct student
{
char name[20];
int age;
int score;
};
int main()
{
//1.创建学生结构体变量
struct student s1[] = {"Meiko",19,100};
//2.通过指针指向结构体变量
// struct student * p = &s1; //该种写法也可以
struct student * p;
p = s1;
//3.通过指针访问结构体变量中的数据
printf("%s %d %d",p->name,p->age,p->score);
return 0;
}
- 结构体嵌套结构体
作用:结构体中的成员可以是另一个结构体
#include<stdio.h>
struct student
{
char name[20];
int age;
int score;
};
struct teacher
{
char name[20];
int age;
struct student stu;
};
int main()
{
struct teacher t1;
strcpy(t1.name,"Scout");
t1.age = 53;
strcpy(t1.stu.name,"Meiko");
t1.stu.age = 19;
t1.stu.score = 100;
printf("%s %d\n%s %d",t1.name,t1.age,t1.stu.name,t1.stu.age);
return 0;
}
3.结构体作为函数参数
作用:将结构体作为参数向函数中传递
#include<stdio.h>
//学生结构体定义
struct student
{
char name[20];
int age;
int score;
};
//值传递
void printStudent1(student s1)
{
s1.age = 24;
printf("printStudent1:%s %d\n",s1.name,s1.age);
}
//址传递
void printStudent2(student *s1)
{
s1->age = 30;
printf("printStudent2:%s %d\n",s1->name,s1->age);
}
int main()
{
struct student s1 = {"Meiko",18,100};
printStudent1(s1);
printf("main1:%s %d\n",s1.name,s1.age);
printStudent2(&s1);
printf("main2:%s %d\n",s1.name,s1.age);
return 0;
}
4.结构体中const使用场景
作用:用const防止误操作
#include<stdio.h>
//学生结构体定义
struct student
{
char name[20];
int age;
int score;
};
//将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
void printStudent(const student *s1)
{
// s1->age = 30; //加入const之后,一旦有修改的操作就会报错,可以防止我们的误操作
printf("printStudent:%s %d\n",s1->name,s1->age);
}
int main()
{
struct student s1 = {"Meiko",18,100};
printStudent(&s1);
printf("main1:%s %d\n",s1.name,s1.age);
return 0;
}