大家好!这部分内容是《C语言初阶》中最后一个知识点,我会在这篇文章中让大家了解结构体的一些基本概念,在《进阶》时,我会更加详细的介绍结构体。好了,话不多说,直接开始。
1.结构体的声明
1.1 结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
1.2 结构的声明
语法形式:
struct tag
{
member-list;
}variable-list;
struct 是结构体的关键字。tag是结构体标签。
member-list是成员列表。variable-list是变量列表。
我们举一个学生的例子:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}s1,s2;//分号不能丢
这里s1,s2都是结构体变量。等同于在main函数创建一样:
这两种创建变量的区别是什么呢?
上面的方式是全局的,在main里面是局部的。
1.3 结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
1.4 结构体变量的定义和初始化
这里比较简单,我们举个例子:
struct Stu
{
char name[20];//名字
int age;//年龄
};
int main()
{
struct Stu s = {"zhangsan",18};
return 0;
}
那我们在结构体里面再放一个结构体,该怎么初始化呢?
struct A
{
int a;
char b;
double c;
};
struct Stu
{
struct A d;
char name[20];//名字
int age;//年龄
};
int main()
{
struct Stu s = { {10,'w',3.14},"zhangsan",18};
return 0;
}
就再大括号里面再加一个括号就ok了,里面初始化另一个结构体里的成员变量。
2. 结构体成员的访问
1.结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
例如:
2.结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。那该如何访问成员。
例如:
这两种方式都可以。
3. 结构体传参
我们知道s里面有arr,f,ch,它们加起来是一块非常大的空间,我们传s过去,其实是传值调用。传值调用是一份临时拷贝,所以在函数调用时也会再次创建一个一样空间大小的tmp。这样,对电脑的消耗是非常大的。
那我们该怎么去改呢?
这样我们传地址过去就会节约许多。
小结:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,会导致性能的下降。
结构体传参的时候,要传结构体的地址。
总结:
到这里,我们《C语言初阶》的基本内容已经差不多结束了。很快就会讲解《C语言进阶》,这部分内容会更加深入,我会尽我所能给大家讲清楚。如果大家认为我有哪些不足之处或者知识上的错误都可以告诉我,我会在之后的文章中不断改正,也请大家多多包。如果大家觉得这篇文章有用的话,也希望大家可以给我关注点赞,你们的支持就是对我最大的鼓励,我们下一篇文章再见。