枚举、结构和联合

枚举

  • 常量化符号:用符合而不是具体的数字来表示程序中的数字
  • 用枚举而不是定义独立的const int变量
  • 枚举是用户定义的一种数据类型,他用enum关键字以下语法来定义:
  • enum 枚举类型名字{名字0,名字1…名字n};
  • 类型是int类型,值是从0开始
const int red = 0;
const int green = 1;
const int bule = 2;
写成枚举形式:
enum COLOR {RED, GREEN, BLUE};
定义
enum COLOR t = RED;//t = 0;
  • 声明枚举量的时候可以指定值
enum COLOR {RED = 1, GREEN, BLUE = 5,YELLOW};
RED = 1;
GREEN = 2;
BLUE = 5;
YELLOW = 6

结构

声明结构的形式

struct point{
	int x;
	int y;
};
struct point p1,p2;
//p1和p2都是point类型,里面都有x和Y的值

struct{
	int x;
	int y;
};
struct p1,p2;
//p1和p2都是无名结构,里面都有x和Y

struct point{
	int x;
	int y;
}p1,p2;
//p1和p2都是point,里面都有x和Y的值
  • 第一种和第三种都声明了结构point,第二种没有声明point,只定义了两个变量

初始化

struct data{
	int day;
	int month;
	int year;
};
struct data today = {07,08,2023};
struct data thismonth = {.month = 08, .year = 2023}

结构运算

  • 要访问整个结构体可以直接用结构变量的名字
  • 对于整个结构体,可以做赋值、取地址、也可以传递给函数参数
p1 = (struct point){5,10}
p1.x = 5;
p1.y = 10;

p1 = p2;
p1.x = p2.x; p1.y = p2.y;

结构指针

  • 与数组不同的是,结构变量的名字并不是结构变量的地址,必须用&运算符
struct point p1 = {1,2}; 
struct point *p2 = &p1;

结构作为函数参数

int max(struct point p1);
  • 整个结构可以作为参数的值传给函数
  • 这时候是在函数内部新建一个结构变量,并赋值调用者的结构的值
  • 也可以返回一个结构
  • 这与数组完全不同

结构指针作为参数

struct data{
	int day;
	int month;
	int year;
}myday;
struct data *p = &myday;
(*p).day = 10;
p->day = 10; 

用->表示指向结构体中的成员变量
结构数组和结构中的结构

  • 结构数组
struct data datas[100];
struct data datas[100] = {
	{1,5,2023},{1,10,2023}};
  • 结构中的结构
struct point{
	int x;
	int y;
};
struct date{
	struct point p1;
	struct point p2;
};
如果有
struct data d1;
那么就有
d1.p1.x、d1.p1.y、d1.p2.x、d1.p2.y
如果有
struct data d,*pd;
pd = &d;
那么就有下面四种形式等价
d.p1.x;
pd->p1.x;
(d.p1).x;
(pd->p1).x;
但是没有pd->p1->x;因为p1不是指针

联合

联合和结构体类似,但作用和大小不同,联合的大小是几个类型中最大的那个值。

union student
{
	int n;
	int age;
};
union student un;
printf("%d", sizeof(un));//4

union student
{
	int n;
	int age;
	char m;
};
union student un;
un.n= 100;
printf("%d", sizeof(un));//4
printf("%d", un.age);//100
printf("%d", un.m);//100
printf("%c", un.m);//d

联合的作用:一般来说,不同的变量存在不同的内存,但联合中的这三个变量就存在同一段内存,只是在固定的某时刻,这个内存中只有这三个元素的其中一个元素存在,说到底是省了内存空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晶小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值