文章目录
结构体的概念
结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。
1.结构体的声明
1.1普通声明
我们假设要创建一本书的类型,那我们需要书名,作者,价格,书的ID
代码如下:
struct Book
{
char BName[20];//书名
char Author[20];//作者
float Price;//价格
char BId;//书的ID
}Book;//分号前的名字可以省略,但分号不能省略
1.2结构体的初始化
struct Book
{
char BName[20];
char Author[20];
float Price;
char BId;
};
//结构体的初始化方式
int main()
{
struct Book b1 = {
"C语言程序设计" , "张三", 29.9,"B100001" };//按照结构体的内部顺序初始化
struct Book b2 = {
.Price = 59.9, .BId = "B100002", .Author = "李四" ,.BName = "C语言进阶" };
// 也可以乱序来初始化,但格式为 成员变量.初始化值
}
1.3结构体的特殊声明
在声明结构体的时候,可以不完全声明
例如:
//匿名结构体类型基本上只能使用一次
struct
{
char c;
int i;
float f;
double d;
}s = {
'x',100,3.1f,3.14};
int main()
{
struct s;//error(这是错误的)
//需要将上面代码删除或屏蔽
printf("%c %d %f %lf", s.c, s.i, s.f, s.d);
}
那我们如果想让他能够重复使用该怎么办呢?
我们可以用 typedef 对匿名结构体进行重命名
typedef struct
{
char c;
int i;
float f;
double d;
}s;
但没有意义,我匿名了又给他取个名字,这就是饶了一圈又回到了普通声明了
这就有点多此一举了,还不如直接用普通声明呢。
1.4结构体的自引用
结构体内部包含一个自己类型的成员可以吗?
例如:定义一个链表的节点
#