C语言自定义类型【结构体】

结构体的概念

结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。

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结构体的自引用

结构体内部包含一个自己类型的成员可以吗?
例如:定义一个链表的节点

#
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值