一起来了解一下C++的结构体?struct
C语言中的结构体是一种用户自定义数据类型,它可以将不同类型的数据组合成一个整体,供程序员使用。在C语言中,结构体是由一组相关的变量(元素)组成的,这些变量可以是不同类型的,但是却具有某种相关性。下面我们一起来了解一下C语言中结构体的定义、初始化、访问、指针、位域等相关知识。
一、结构体的定义
C语言中使用struct关键字来定义结构体,其一般形式为:
struct 结构体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
。。。
数据类型n 成员变量名n;
}结构体变量名;
其中,结构体变量名可省略。
例如,下面这个例子定义了一个学生的结构体:
struct Student{
int id; //学号
char name[50]; //姓名
int age; //年龄
char sex; //性别
float score; //成绩
};
二、结构体的初始化
结构体变量的初始化方式有两种:一种是在定义结构体变量的同时进行初始化,一种是定义后再逐个赋值或者使用结构体初始化器统一赋初值。
①在定义结构体变量的同时进行初始化
例如,下面这个例子定义并初始化了一个学生结构体:
struct Student stu = {20191001,"张三",20,'M',83.5};
②逐个赋值或使用结构体初始化器统一赋初值
例如,下面这个例子定义结构体变量后再进行初始化:
struct Student stu;
stu.id = 20191001;
strcpy(stu.name,"张三");
stu.age = 20;
stu.sex = 'M';
stu.score = 83.5;
三、结构体的访问
结构体成员的访问方式有两种:一种是直接使用结构体变量名和“.”操作符访问;一种是先定义指向结构体的指针变量,然后使用“->”操作符访问。
①直接使用结构体变量名和“.”操作符访问
例如,下面这个例子访问了学生结构体中的某个成员:
struct Student stu = {20191001,"张三",20,'M',83.5};
printf("学号:%d
",stu.id);
②使用指向结构体的指针和“->”操作符访问
例如,下面这个例子使用指向结构体的指针变量访问了学生结构体中的某个成员:
struct Student stu = {20191001,"张三",20,'M',83.5};
struct Student *pstu = &stu;
printf("姓名:%s
",pstu->name);
四、结构体指针
同其他数据类型一样,结构体变量也有地址。因此可以用指向结构体的指针变量来存储结构体变量的地址,以便访问和修改结构体的成员变量。
例如,下面这个例子使用指向结构体的指针变量访问了学生结构体中的某个成员:
struct Student stu = {20191001,"张三",20,'M',83.5};
struct Student *pstu = &stu;
printf("姓名:%s
",pstu->name);
五、结构体的位域
位域是指在一个数据结构中,各个成员不是按照自然顺序一个接一个排列的,而是按照预定的位数来分配存储空间,从而达到节省存储空间的目的。
例如,下面这个例子定义了一个含有位域(bit-field)的结构体:
struct Flag{
unsigned int a:1;
unsigned int b:2;
unsigned int c:3;
};
其中,a占1位,b占2位,c占3位。在这个结构体中,a、b、c三个成员变量的总占用空间是6个bit(不足1byte),而不是9个bit(1byte)。
六、总结
以上就是关于C语言中结构体的一些基本概念、定义、初始化、访问、指针、位域等知识。结构体作为一种自定义的数据类型,可以帮助我们将不同类型的数据组合成一个整体,方便程序员的处理。在实际开发中,结构体也有着非常重要的作用,这里只是简单的介绍,请读者自行深入学习。
