1、枚举
enum 枚举名 {枚举元素1,枚举元素2,……};
#include <stdio.h>
//枚举day
enum day
{
Mon=1, //1
Tue, //2
Wed, //3
Thur, //4
Fri, //5
Sat, //6
Sun //7
}day;
//枚举color
enum color
{
Red=0, //0
Green, //1
Blue=4, //4
Orange, //5
Yellow, //6
};
int main()
{
enum color c;
printf("请输入颜色:\r\n");
scanf("%d",&c);
switch(c)
{
case Red: printf("Red\r\n");break;
case Green: printf("Green\r\n");break;
case Blue: printf("Blue\r\n");break;
case Orange:printf("Orange\r\n");break;
case Yellow:printf("Yellow\r\n");break;
default:printf("404 not found\r\n");break;
}
//枚举有序,可进行遍历,无序则不可遍历
for(day=Mon;day<=Sun;day++)
{
printf("星期%d\r\n",day);
}
//枚举无序,输出的数据有错误!
for(c=Red;c<=Yellow;c++)
{
printf("颜色%d\r\n",c);
}
}
运行结果如下:
请输入颜色:
5
Orange
枚举有序遍历
星期1
星期2
星期3
星期4
星期5
星期6
星期7
枚举无序遍历
颜色0
颜色1
颜色2
颜色3
颜色4
颜色5
颜色6
不难看出当枚举有序的时候,遍历出来的数据是和原本的枚举数据是一致的;枚举无序时会在默认值开始累加,然后当下一个值被赋值时,数据又从被赋值的那个值重新开始累加,以此类推。
2、结构体
struct 结构体标签
{
变量定义1
变量定义2
变量定义3
} 结构变量;
#include <stdio.h>
struct sample
{
int id;
float hrm;
}test={123,321.123};
typedef struct Message
{
int decive_id;
int avg;
float accel[3];
float gryo[3];
float mag[3];
};
int main()
{
struct Message a;
a.decive_id=12;
a.avg=76;
printf("结构体Message字节占:%d\r\n",sizeof(a));
printf("decive_id:%d\r\n",a.decive_id);
printf("avg:%d\r\n",a.avg);
printf("结构体sample字节占:%d\r\n",sizeof(test));
printf("%d,%.3f",test.id,test.hrm);
}
运行结果如下:
结构体Message字节占:44
decive_id:12
avg:76
结构体sample字节占:8
123,321.123
3、共同体
共用体允许在相同的内存位置存储不同的数据类型,定义一个带有多成员的共用体,但是在任何时候只能有一个成员是带值的;
共用体提供了一种使用相同的内存位置的有效方式。
union 共用体名称
{
变量定义1;
变量定义2;
变量定义3;
} 共用体变量;
#include <stdio.h>
#include <string.h>
union Message
{
int a;
float b;
char c[16];
};
union data
{
int i;
float j;
char k[4];
};
void main()
{
union data one;
union Message two;
printf("one sizeof:%d\r\n",sizeof(one));
printf("two sizeof:%d\r\n",sizeof(two));
}
运行结果如下:
one sizeof:4
two sizeof:16