1结构体的声明
1.1结构的基础知识
1.2结构的声明
1.3结构成员的类型
1.4结构变量的定义和初始化
2结构体成员的访问
3结构体传参
目录
1结构体的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
在我们之前学的数组定义中,数组:一组相同类型元素的集合。
为什么在语言中会有结构体了,因为生活中有许多复杂的对象,就比如,一个人,一本书,他的组成是复杂多元的,它不能用一个单一的数字来表达,就比如一本书,如果我想要描述清楚一本书,他有书名,他有著作者,它有定价……一个学生,要描述清楚就需要描述它的名字、年龄、性别、成绩……
1.2结构的声明
结构的声明是用struct,后面跟一个标签名字。这个标签名字是可以根据自己的需求来取的。
如果我想描述一个学生描述,在我用括号括起来的部分是成员列表,,可以看到这些成员有的是不同类型的变量。在这里注意我们只是声明了类型。
一定要注意这里只是声明类型,接下来我们用声明的类型来创建变量,这里的s1,s2,s3是一个结构体变量,才向内存申请空间。
在我们的创建的变量s1,s2,s3里面有name,有age,有sex,有score。
1.3结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体
1.4结构变量的定义和初始化
如何去定义结构体变量了接下来,有三种方法:
方法一:
方法二:
方法三:
struct stu
{
char name[20];
int age;
char sex[10];
float score;
}; s4;
struct stu s5;
int main()
{
struct stu s1, s2, s3;
return 0;
}
值得注意的是,我们的结构体声明也是可以放在我们的主函数里面注意画下划线的地方
在这里初始化的时候我们其实和数组差不多只不过结构体初始化的时候,里面的值可能是不同类型。
struct stu
{
char name[20];
int age;
char sex[10];
float score;
};
int main()
{
struct stu s1 = { "张三" ,20,"nan",95.5f };
struct stu s2={"wangcai",21,"保密",59.5f};
printf("%s %d %s %.1f\n", s2.name, s2.sex, s2.sex, s2.score);
return 0;
}
结构体中嵌套结构体如何对他进行初始话和定义了?
在结构体中也可以是结构体,我们在这里定义一个struct S,在里面我们定义一个整型a一个字符c,然后我们在定义一个struct P,定义一个double类型的d,然后struct S s ;我就用上面这个结构体(struct S)创建了一个变量作为这一个结构体中(struct P)的成员。在float类型的f。紧接着我在主函数里定义一个变量我给他初始话,用一个大括号,第一个是一个double类型的我们就给个5.5,接着是一个结构体了,那我们再用一个大括号括起来。附上对应类型的值。在结构中嵌构一个结构体的话,那我们在初始化的时候就用大括号嵌构大括号,如果我们想找到结构体中结构体的成员就用P.s.a这种方式。b'l
输出:100 b
2结构体成员的访问
结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。
点操作符接受两个操作数。
结构体指针访问指向变量的成员 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。 那该如何访问成员我们直接上代码
总结这两种访问方法就为:
1 .操作符
2 ->操作符
3结构体传参
为了打印我可以把值传参过去,可以把址传参过去
在这里我想问一下大家觉得哪个代码要好一些,(Print1还是Print2)?
第二种更好
原因:
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。
结论:
结构体传参的时候,要传结构体的地址。