这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开
如何学好一门编程语言
- 掌握基础知识,为将来进一步学习打下良好的基础。
- 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
- 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了
共用体允许我们在相同的内存位置存储多个不同数据类型的成员,但是任何时候只能有一个成员带有值。
共用体提供了一种使用相同的内存位置的有效方式。
定义共用体
共用体的定义和结构体类似,共用体需要使用 union 语句,格式为:
union [共同体标签] { 成员定义; 成员定义; ... } [一个或多个共用体变量];
举例说明:
union Data { int i; float f; char str[20]; } data;
共用体标签 和 共用体变量 是可选的,
共用体 占用的内存等于 最大成员的存储内存
#include <string.h> union Data{ int i; float f; char str[20]; }; int main(){ union Data data; char str_1[20]; float f_1; printf("数据占用的内存: %d\n", sizeof(f_1)); // 4 printf("数据占用的内存: %d\n", sizeof(str_1)); // 20 printf("数据占用的内存: %d\n", sizeof(data)); // 20 return 0; }
访问共用体成员,使用 共用体变量.成员
#include <stdio.h> #include <string.h> union Data{ int i; float f; char str[20]; }; int main(){ union Data data; data.i = 10; data.f = 220.5; strcpy(data.str, "C Programming"); printf("data.i : %d\n", data.i); // 1917853763 printf("data.f : %f\n", data.f); // 4122360580327794860452759994368.000000 printf("data.str : %s\n", data.str); // C Programming return 0; }
我们发现共用体的 i 和 f 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因。
现在让我们再来看一个相同的实例,这次我们在同一时间只使用一个变量,这也演示了使用共用体的主要目的:
#include <stdio.h> #include <string.h> union Data{ int i; float f; char str[20]; }; int main(){ union Data data; data.i = 10; printf("data.i : %d\n", data.i); // 10 data.f = 220.5; printf("data.f : %f\n", data.f); // 220.500000 strcpy(data.str, "C Programming"); printf("data.str : %s\n", data.str); //C Programming return 0; }
在这里,所有的成员都能完好输出,因为同一时间只用到一个成员。