结构体与枚举(简单理解)

文章介绍了C语言中的结构体和枚举的概念及用法。结构体允许存储不同类型的数据,方便描述对象,且有填充机制以优化内存对齐。枚举则用于表示有限的离散值,提高代码可读性。文章还提到了结构体的初始化、赋值以及通过指针访问成员的方法,并讨论了枚举变量的定义与使用。
摘要由CSDN通过智能技术生成

结构体与枚举

c语言使用结构体和数组表示聚合变量,数组要求元素类型一致,而结构体可以用来存储类型不一致的变量。结构体跟C++中的类很相似。

使用结构体能够很方便胡描述一个对象。

1.定义结构体

struct student_s {	//student_s:标签
	int number;
	char name[25];
	char gender;
	int chinese;
	int math;
	int english;
};

2.学生结构体成员会有两个字节的填充、填充的目的是为了使数据项对其,方面CPU读取数据。

3.结构体初始化

Student_s s1 = {1,"yfg",'m',99,99,99};
Student_s s2 = {1};	//未初始化的成员会被赋值为0

3.结构体成员的访问:

s1.number = 99;
s1.number++;

4.结构体的赋值

s2 = s1;

结构体的赋值:表示将A内存空间的数据复制到B内存空间(A,B结构结构体)
Student结构体中具有数组,我们知道数组之间不能直接复制,那为什么在结构体中可以?

–>结构体之间的赋值是将A中的数据一一复制到结构体B中,所以当传递或者返回一个结构体时
都会导致结构体的复制,这回增加程序开销,为了避免这种情况应该传递结构体指针。

5.结构体指针

Student_s* stu = s1;

6.结构体指针的访问:C语言提供右箭头->用于结构体指针访问结构体成员

等价于: (*stu).name

stu->name;
stu->number;
//等价
(*stu).name
给结构体定义别名:使用typedef关键字给结构体类型定义别名
typedef struct student_s {	//student_s:标签
	int number;
	char name[25];
	char gender;
	int chinese;
	int math;
	int english;
}Student;

定义别名时,标签省略。

枚举

在很多程序中,有些变量只能取一些离散的值。比如,扑克牌的花色只有 {黑桃、红 桃、梅花、方块}。显然,我们可以用 int 类型来表示这些值,为了增加代码的可读 性,我们还可以添加一些宏定义:

#define SUIT int
#define DIAMONDS 0
#define HEARTS 1
#define SPADES 2
#define CLUBS 3
SUIT s = HEARTS;

但是这种方式存在有一些问题:

  1. 没有显示地表明 DIAMONDS、HEARTS、SPADES、CLUBS隶属于同一种类型;

    2如果离散值比较多,为每个值添加一个宏定义将会很繁琐;

    3.预处理器会删除我们定义的名字:DIAMONDS、HEARTS、SPADES、CLUBS,所以 在调试的时候我们是没办法使用这些名字的。 因此,C 语言提供了一种特殊的类型——枚举类型,用来解决这些问题。也就是说枚 举类型是用来表示一些离散值的。

我们可以使用枚举:

枚举

1.定义枚举变量

enum Suit{
	DIAMONDS,
	HEARTS,
	SPADES,
	CLUBS
};

enum Suit s = HEARTS;//定义枚举类型的变量

2.给枚举变量起别名: 和结构体起别名一样

typedef enum{
	DIAMONDS,
	HEARTS,
	SPADES,
	CLUBS
}Suit;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值