嵌入式学习笔记C语言阶段--17共用体和枚举
枚举(Enumeration)
概念
枚举是 C 语言中的一种用户自定义数据类型,它用于定义一组命名的整数常量。枚举类型可以提高代码的可读性和可维护性,因为使用有意义的名称来代替数字,使代码更易于理解。
案例
以下是一个简单的枚举示例,用于表示一周的七天:
#include <stdio.h>
// 定义枚举类型 Weekday
enum Weekday {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
};
// 函数用于打印对应星期几的信息
void printWeekday(enum Weekday day) {switch (day) {case MONDAY:printf("Today is Monday.\n");break;case TUESDAY:printf("Today is Tuesday.\n");break;case WEDNESDAY:printf("Today is Wednesday.\n");break;case THURSDAY:printf("Today is Thursday.\n");break;case FRIDAY:printf("Today is Friday.\n");break;case SATURDAY:printf("Today is Saturday.\n");break;case SUNDAY:printf("Today is Sunday.\n");break;default:printf("Invalid day.\n");}
}
int main() {// 声明一个枚举类型的变量并初始化为 WEDNESDAYenum Weekday today = WEDNESDAY;// 调用函数打印信息printWeekday(today);
return 0;
}
代码解释
-
枚举类型定义:
enum Weekday
定义了一个名为Weekday
的枚举类型,包含了一周七天的名称。默认情况下,MONDAY
的值为 0,TUESDAY
的值为 1,依此类推。 -
函数
printWeekday
:该函数接受一个enum Weekday
类型的参数,并根据传入的值使用switch
语句打印相应的信息。 -
main
函数:声明一个enum Weekday
类型的变量today
并初始化为WEDNESDAY
,然后调用printWeekday
函数打印信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
枚举类型1. 枚举类型每一个元素在没有给予默认值的情况下,第一个元素对应的数值为 0,之后的元素逐个递增2. 枚举中的元素可以指定数据,之后的数据在没有赋予明确的数值下,对应的数据从当前指定数据之后递增3. 枚举中的每一个元素都可以单独赋值
*/
enum Week
{SUN,MON,TUS = 5,WEN,THU,FRI,SAT
};
/*
演示案例!不正确,可以利用 十六进制控制二进制数据内容进行调节
利用一个字节数据改变硬件状态。
*/
enum STM_GPIO
{GPIO_1 = 0x1,GPIO_2 = 0x2,GPIO_3 = 0x4,GPIO_4 = 0x8,GPIO_5 = 0x10,GPIO_6 = 0x20
};
int main(int argc, char const *argv[])
{printf("SUN : %d\n", SUN);printf("SUN : %d\n", MON);printf("SUN : %d\n", TUS);printf("SUN : %d\n", WEN);printf("SUN : %d\n", THU);printf("SUN : %d\n", FRI);printf("SUN : %d\n", SAT);
return 0;
}
共用体(Union)
概念
共用体也是一种用户自定义数据类型,它允许在相同的内存位置存储不同的数据类型。共用体的所有成员共享同一块内存空间,因此在同一时间只能使用一个成员。
案例
以下是一个简单的共用体示例,用于存储不同类型的数据:
#include <stdio.h>
// 定义共用体类型 Data
union Data {int i;float f;char str[20];
};
int main() {// 声明一个共用体类型的变量 dataunion Data data;
// 存储整数data.i = 10;printf("data.i: %d\n", data.i);
// 存储浮点数data.f = 220.5;printf("data.f: %.2f\n", data.f);
// 存储字符串snprintf(data.str, sizeof(data.str), "Hello");printf("data.str: %s\n", data.str);
return 0;
}
代码解释
-
共用体类型定义:
union Data
定义了一个名为Data
的共用体类型,包含一个整数i
、一个浮点数f
和一个字符数组str
。 -
main
函数:声明一个union Data
类型的变量data
,然后分别存储整数、浮点数和字符串,并打印出相应的值。需要注意的是,每次存储新的数据时,会覆盖之前存储的数据。
#include <stdio.h>
/*
共用体1. 共用体占用内存空间大小取决于整个共用体中的占用内存最大数据类型2. 共用体空间使用需要主要内存清理问题3. 注意共用体内存数据问题
*/
// 定义共用体类型 Data
union Data {int int_arr[10]; // 40double double_arr[10]; // 80char str[40]; // 40
};
int main(int argc, char const *argv[])
{printf("sizeof(Data) : %ld\n", sizeof(union Data));
union Data data;
/*每一次使用共用体,有且只允许使用共用体的一个元素内容*/data.int_arr[5] = 65;printf("data.int_arr[0] = %d\n", data.int_arr[0]);printf("data.int_arr[1] = %d\n", data.int_arr[1]);printf("data.int_arr[2] = %d\n", data.int_arr[2]);printf("data.int_arr[3] = %d\n", data.int_arr[3]);printf("data.int_arr[4] = %d\n", data.int_arr[4]);printf("data.int_arr[5] = %d\n", data.int_arr[5]);printf("data.int_arr[6] = %d\n", data.int_arr[6]);
printf("&data : %p\n", &data);printf("&data.int_arr[5] : %p\n", &data.int_arr[5]);
printf("data.str[20] : %c\n", data.str[20]); // 'A'return 0;
}