自定义数据类型(下)

您所在的位置:网站首页 c语言如何判断数据类型是否存在 自定义数据类型(下)

自定义数据类型(下)

2023-06-09 12:51| 来源: 网络整理| 查看: 265

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;

}

演示效果:

6 总结

union是struct的兄弟关键字,用法上非常相似。

union类型所有成员共享同一段内存。

enum能够定义整型常量的集合类型。

enum的本质是int类型,常用于整型常量定义。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3