目录
一、struct的概念
1、类比:
2、含义详解:
二、结构体变量的定义
1、创建结构体类型的时候定义
2、具体使用的时候定义
三、如何得到结构体成员?
1、通过 . 点操作符得到结构体成员
2、运用指针通过箭头 -> 得到结构体成员
四、结构体的自引用注意事项
1、错误用法(无限套娃)
2、正确用法
五、结构体传参
1、传值
2、传地址
一、struct的概念
1、类比:
数组里存放的是相同元素的集合,而结构体存放的可以是不同元素的集合。
例如描述一个学生:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢
2、含义详解:
struct--定义结构体
Stu--结构体标签(方便了解结构体成员类型,在这里就是学生的相关信息)
struct Stu:结构体类型
二、结构体变量的定义
(使用:类型+变量名(类似于int a,char b))
1、创建结构体类型的时候定义
struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
//创建的时候定义变量
}s1,s2,s3;
//直接使用
s1={…………};
s2={…………};
2、具体使用的时候定义
struct Stu s = { "张三",18,"男","123456" };//成员之间用 , 隔开
三、如何得到结构体成员?
1、通过 . 点操作符得到结构体成员
printf("%s %d %s %s", , , , );
2、运用指针通过箭头 -> 得到结构体成员
struct Stu s = { "张三",18,"男","123456" };
//创建结构体指针
struct Stu* p = &s;
printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);
四、结构体的自引用注意事项
1、错误用法(无限套娃)
//错误用法
struct S
{
int data;
struct S next;
};
2、正确用法
struct S
{
int data;
//指针
struct S* next;
};
五、结构体传参
结构体传参可以传值,也可以传地址。
1、传值
void Print(struct Stu s)
{
printf("%s %d %s %s", , , , );
}
int main()
{
struct Stu s = { "张三",18,"男","123456" };
//传值
Print(s);
2、传地址
void Print(const struct Stu* p)//const 修饰*p,*p的值不可以改变,Print函数只负责打印
{
printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);
}
int main()
{
struct Stu s = { "张三",18,"男","123456" };
//传地址
Print(&s);
不过总的来说,还是建议传地址,因为地址大小是固定的4/8字节(32位平台/64位平台),而且通过地址我们可以在函数内部改变结构体成员变量的值,权限更多一些。
。