自定义数据类型(下) |
您所在的位置:网站首页 › c语言如何判断数据类型是否存在 › 自定义数据类型(下) |
1 问题
除了struct结构体类型,C语言中是否还存在其它的自定义数据类型? 2 C语言中的联合体(union)union是C语言中的自定义类型关键字。 union是struct的兄弟关键字,用法上非常相似。 语法: union TypeName { Type1 var1; Type2 var1; // .... TypeN varn; }; union 与 struct 的不同 union类型所有成员共享同一段内存 (所有成员起始地址相同) union类型的大小取决于成员的最大类型 union类型的变量只能以第一个成员类型的有效值进行初始化 示例代码: #include #include #include union UTest // union联合体共用一个内存 { int a; float f; }; struct STest // struct关键字占用不同的内存 { int a; float f; }; int main() { union UTest ut = {987654321}; // 对ut成员变量的两个初始值的设定 struct STest st = {987654321,0.1f}; printf("union UTest size = %d\n", sizeof(union UTest)); printf("&ut.a = %p\n",&ut.a); printf("&ut.f = %p\n", &ut.f); printf("struct STest size = %d\n", sizeof(struct STest)); printf("&st.a = %p\n", &st.a); printf("&st.f = %p\n", &st.f); printf("ut.a = %d\n", ut.a); printf("ut.f = %f\n", ut.f); ut.f = 987654321.0f; printf("ut.a = %d\n",ut.a); // 浮点数在内存上表示是不精确的 printf("ut.f = %f\n",ut.f); system("pause"); return 0;} 演示效果: 注意:联合体又称为共用体,共用体是指成员变量共用同一段内存。 3 联合体类型的应用---判断系统大小端 (系统指计算机系统)小端系统:低位数据存储在低地址内存中。 大端系统:低位数据存储在高地址内存中。 例: 对于unsigned ui = 1; 在实际生活中,大部分计算机系统是大端系统。(从右向左) 但是也有少部分系统是小端系统(从左向右 左撇子) 4 如何判断系统的大小端?借用union类型的应用----判断系统大小端 int islittleEndian() { union { int i; char a[4]; } test = {0}; test.i = 1; return {test.a[0]==1}; } 方法:当该函数返回1时是小端系统。 当该函数返回0时是大端系统。 示例代码: #include #include #include union UTest // union联合体共用一个内存 { int a; float f; }; struct STest // struct关键字占用不同的内存 { int a; float f; }; int isLittleEndian() { union // 用无名联合体创建变量 { int i; char a[4]; }test = {0}; test.i = 1; return (test.a[0] == 1);} int main() { union UTest ut = { 987654321 }; // 对ut成员变量的两个初始值的设定 struct STest st = { 987654321,0.1f }; printf("union UTest size = %d\n", sizeof(union UTest)); printf("&ut.a = %p\n", &ut.a); printf("&ut.f = %p\n", &ut.f); printf("struct STest size = %d\n", sizeof(struct STest)); printf("&st.a = %p\n", &st.a); printf("&st.f = %p\n", &st.f); printf("ut.a = %d\n", ut.a); printf("ut.f = %f\n", ut.f); ut.f = 987654321.0f; printf("ut.a = %d\n", ut.a); // 浮点数在内存上表示是不精确的 printf("ut.f = %f\n", ut.f); printf("System Endian: %d\n",isLittleEndian()); system("pause"); return 0;} 演示效果: 由实际操作结论知,当前系统是小端系统。即低位数据存储在低地址内存中。 5 C语言中其他自定义的数据类型---枚举类型 (enum关键字)enum是C语言中的自定义类型关键字。 enum能够定义整型常量的集合类型。 语法:enum TypeName { IntConst1, IntConst2, // ...... IntConstN // 整型常量 }; enum定义常量的使用方法与注意事项 第一个枚举常量的默认值为0 后续常量的值在前一个常量的基础上加1 可以任意对枚举常量指定整型值 (只能指定整型值) 例如: enum Day {MON =1,TUE,WED,THU,FRI,SAT,SUN}; // 后续常量的值在前一个常量的基础上加1 enum season {Spring,Summer = 3,Autumn,Winter = -1}; // 可以任意对枚举常量指定整型值 (只能指定整型值) 示例代码: #include #include #include enum Day { MON = 1, TUE, WED, THU, FRI, SAT, SUN }; // enum关键字声明,占用内存为4字节。 enum Season { Spring, Summer = 3, Autumn, Winter = -1 }; enum {CONSTANT = 12345 }; // 定义无名结构体类型 int main() { enum Day d = TUE; // enum关键字使用 enum Season s = Winter; int i = SUN; int j = Autumn; printf("d = %d\n", d); printf("s = %d\n", s); printf("i = %d\n", i); printf("j = %d\n", j); //d = 0; //s = 1; printf("d = %d\n", d); printf("s = %d\n", s); printf("sizeof(enum Day) = %d\n", sizeof(enum Day)); printf("sizeof(enum Season) = %d\n", sizeof(enum Season)); printf("CONSTAST = %d\n",CONSTANT); system("pause"); return 0;} 演示效果: union是struct的兄弟关键字,用法上非常相似。 union类型所有成员共享同一段内存。 enum能够定义整型常量的集合类型。 enum的本质是int类型,常用于整型常量定义。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |