泰安网站建设公司,网站开发模板代码,iapp网站怎么做软件,奇想网站建设这期我们来讲解结构体#xff0c;联合体#xff0c;以及枚举的讲解#xff0c;首先我们从概念开始一步一步的了解。
1#xff0c;结构体
1.1概念
C 语言中的结构体是一种用户自定义的数据类型#xff0c;它允许你将不同类型的变量组合在一起#xff0c;从而形成一个新…这期我们来讲解结构体联合体以及枚举的讲解首先我们从概念开始一步一步的了解。
1结构体
1.1概念
C 语言中的结构体是一种用户自定义的数据类型它允许你将不同类型的变量组合在一起从而形成一个新的数据类型。结构体在 C 语言中非常有用可以用于表示复杂的数据结构比如学生信息、员工记录、图形对象等。
定义结构体的基本语法如下c
struct 结构体名 {数据类型 成员1;数据类型 成员2;// 更多成员...
};
在这里struct 是关键字后面跟着的是结构体的名称
紧接着是由大括号括起来的成员列表。
每个成员都有其自己的数据类型可以是基本类型如整型、浮点型、字符型等
也可以是其他的结构体类型。
1.2代码实现
很简单吧我们先来试一下 1.3结构体内存对齐
什么是内存存对齐为什么结构体会存在内存对齐内存对齐的规则是什么反正也不会告诉你。
在 C 语言中结构体内存对齐是指编译器在分配内存时为了提高访问效率而进行的一种内存布局优化。结构体的内存对齐是由编译器来决定的它遵循特定的对齐规则以确保结构体成员的访问具有最佳的性能。
在大多数情况下编译器会根据平台的要求和 CPU 架构的特性来进行内存对齐。常见的内存对齐规则如下
1.成员变量的偏移量必须是其大小的整数倍。
2.结构体的大小必须是其最大成员大小的整数倍。
根据内存对齐规则编译器会进行内存对齐可能导致结构体的大小不等于其成员变量大小之和。这是因为编译器会在适当的位置插入填充字节以确保结构体成员按照对齐要求排列从而提高访问效率。
具体的对齐规则可能会因编译器和平台而异你可以使用 sizeof 运算符来获取结构体的大小以便更好地理解编译器对结构体内存布局所做的优化。
当然我们也可以通过设置偏移量来改变其大小 2联合体
2.1概念
在 C 语言中联合体union是一种特殊的数据结构它允许在同一个内存位置存储不同类型的数据。与结构体不同的是联合体中的各个成员共享同一块内存空间因此联合体的大小由最大的成员决定。
2.2代码实现 3枚举
3.1概念
在 C 语言中枚举enum是一种用户定义的数据类型用于定义一组具名的整型常量。枚举类型可以帮助提高代码的可读性使程序员能够使用有意义的符号名称来表示特定的值。
3.2代码实现 3.3define和枚举对比
很多初学C语言的小伙伴觉得枚举很鸡肋用define就能实现的事情干嘛要用枚举。
枚举的优点
类型安全性枚举提供了类型安全因为枚举常量属于特定的枚举类型在赋值和比较时具有类型信息。可读性枚举符号名可以使代码更加易读和清晰因为它们提供了有意义的名称来表示常量值。编译时检查由于枚举常量在编译时被解析因此编译器可以对其进行检查避免拼写错误或值的误用。
宏定义的优点
灵活性宏定义可以定义更复杂的常量如带参数的宏、条件编译等具有更大的灵活性。无类型约束宏定义不受类型限制可以用于定义任何类型的常量包括字符串、表达式等。
如何选择
当需要一组相关的常量并且这些常量属于同一逻辑实体时通常使用枚举更为合适。当需要定义简单的常量或进行代码替换时宏定义可能更加适用。
总的来说枚举提供了更好的可读性和类型安全性而宏定义则更加灵活。
存在就有道理第
4每期一问
上期答案如何写出自己的atoi函数
#includestdio.h
#includeassert.h
#includectype.h
#includestdlib.h
enum State
{VAILD,INVAILD
}Sta INVAILD;//创造变量默认为非法int my_atoi(const char* str)
{assert(str);if (*str \0){return 0;}while (isspace(*str)){str;}int flag 1;if (*str ){flag 1;str;}else if (*str -){flag -1;str;}long long ret 0;while (*str ! \0){if (isdigit(*str)){ret ret * 10 flag * (*str - 0);//减去字符0才是数字0if (ret INT_MAX || ret INT_MIN){return 0;}}else{return (int)ret;//强制类型转化为int函数的返回值是int}str;}if (*str \0){Sta VAILD; //正常转换完了到末尾的 \0}return (int)ret; 这期的问题是使用malloc函数模拟开辟一个3*5的整型二维数组开辟好后使用二维数组的下标访问形式访问空间。