文章目录
- 一、联合体
- 1.联合体的概念:
- 2.联合体的定义:
- 3.联合体的初始化:
- 4.联合体指针与成员引用:
- 5.联合体的使用:
- 二、枚举(enum)
- 1.概念:
- 2.枚举的应用:枚举类型的成员变量等价于整型,其支持整型数据的一切操作
提示:以下是本篇文章正文内容,下面案例可供参考
一、联合体(union)
1.联合体的概念:
联合体与结构体形式上类似,都是有多个不同的数据类型的变量组合而成,但与结构体不同的是联合体所用的成员变量共同使用同一个地址,在联合体中所有的成员变量都是互斥的,我们给联合体中一个成员变量赋值会使其他的成员变量失效,在同一个时间段,联合体只有一个有效的成员变量,联合体的尺寸为联合体中最大成员变量的m值(也就是其所占的字节数)。
画图理解联合体:
union attr{
int x;
char y;
double z;
};
2.联合体的定义:
#include<stdio.h>
//联合体类型的定义:
union attr{
int x;
char y;
double z;
};
int main(){
//联合体的定义
union attr at;
}
3.联合体的初始化:
#include<stdio.h>
//联合体类型的定义:
union attr{
int x;
char y;
double z;
};
int main(){
//普通赋值
union attr at1 = {1,'s',10.8};//只有第一个有效
//指定成员赋值
union attr at2 =
{
.x = 100,
.y = 'a',
.z = 88.8//最后一个赋值的成员变量有效
};
}
4.联合体指针与成员引用:
#include<stdio.h>
#include<string.h>d
//联合体类型的定义:
union attr{
int x;
char y;
double z;
char c[100];
};
int main(){
//联合体的指针,成员变量的引用。
union attr *p = &at2;
p->x = 100;
p->y = 'a';
p->z = 99.8;//最后一个赋值的成员变量有效
//p->c = "aaa";会报错
strcpy(p->c,"aaa");//使用strcpy函数才行
}
5.联合体的使用:
#include<stdio.h>
union attr{
int chinese;
int math;
int english;
};
struct student{
int id;
char name[100];
union attr at;
};
int main(){
/**
* 联合体一般是放在结构体中进行嵌套使用
*/
//普通初始化
struct student s1 = {1,"aaa",1,1,1};
printf("%d,%s,%d,%d,%d\n",s1.id,s1.name,s1.at.chinese,s1.at.math,s1.at.english);
//指定成员变量初始化
struct student s2 =
{
.id = 100,
.name = "aaaa",
.at.chinese = 1,
.at.english = 5,
.at.math = 10
};
printf("%d,%s,%d,%d,%d\n",s2.id,s2.name,s2.at.chinese,s2.at.math,s2.at.english);
}
运行结果:
二、枚举(enum)
1.概念:
枚举
作用:就是用有意义的单词代替无意义的数字,增加代码的可读性。
关键字enum
若未给枚举类型的成员变量初始化则枚举类型的元素是从0开始,后一个元素值是
前一个元素值+1
#include<stdio.h>
//枚举类型的定义
enum season{
spring = 1,
summer,
autumn = 10,
winner
};
int main(){
printf("%d\n",summer);//summer等价于2
enum season s = winner;//winner = 11,该表达式等价于s = 11
printf("%d\n",s);
}
运行结果:
2.枚举的应用:枚举类型的成员变量等价于整型,其支持整型数据的一切操作
#include<stdio.h>
//设计一个小车,用枚举实现
//前进,后退,向左,向右四个功能,根据move选择小车移动的方向
enum car_move{
car_move_up = 1,//表示小车向上移动
car_move_down,//表示小车向下移动
car_move_left,//表示小车向左移动
car_move_right//表示小车向右移动
};
int main(){
enum car_move move = car_move_up;
switch(move){
case car_move_up:
printf("小车向上移动\n");
break;
case car_move_down:
printf("小车向上移动\n");
break;
case car_move_left:
printf("小车向上移动\n");
break;
case car_move_right:
printf("小车向上移动\n");
break;
default:
printf("error\n");
}
}
运行结果: