之前介绍过C语言中自带的变量类型,如字符型变量char、整型变量int、浮点型变量flaot等等。
今天介绍一下C语言中的自定义变量。
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];//学号
}; //分号不能丢
这里声明一个名为Stu的结构体变量,结构体成员有姓名name、年龄age、性别sex、学号id
这样,当我们想要确定某个人的时候就方便多了
3、结构体类型的初始化
根据上述
struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
}stu1,stu2;
struct stu3;
这两种都可以用来创建结构体变量
(1)、在创建结构体变量类型时在{}外面写上想要创建的变量名,创建多个时需要用‘,’隔开
(2)、struct 结构类型名 变量名
对变量内容的初始化
struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
}stu1,stu2;
struct Stu stu3={"zhangsan",12,"male","123456789"};//按创建结构体类型时的顺序输入
4、结构体成员的访问
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数
同样我们可以通过结构体成员访问来改变结构体成员的值
这也就意味着,我们也可以通过访问结构体变量来给结构体赋值
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针
5、结构体传参
来看一段代码
这里创建两个打印函数,print1使用结构体变量作为参数,print2使用地址作为参数
得出的结果是一样的,那么用哪种更好呢?
答案是地址传参
因为:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。