作者:十月天文 C语言的共用体union什么意思呢,就是在同一块内存存储可以定义多个数据类型,但是在使用的时候,只有一个变量有效。 这里就有一个问题,变量有大有小呀,对的,所以这个时候共用体的空间为内部变量最大占用空间的值。 如此这般,共用体就可以通过共享存储空间,来避免当前没有被使用的变量所造成的存储空间的浪费。 共用体的成员可以使用任何数据类型,但是一个共用体所占用的存储空间的字节总数,必须保证至少足以能够容纳其占用空间字节数最大的成员。并且共用体每次只允许访问一个成员,也就是一种数据类型,确保按照正确的数据类型来访问共用体中的数据,就是你的责任了。 先看看union的格式: union [tag] { member definition; member definition; ... member definition; } [variables];
举个例子:
通过这个例子可以看到,这个结构体的大小是多少呢?可以通过程序来确认一下。
#include <stdio.h> #include <string.h> union test { int i; float f; double d; char str[20]; }; int main( ) { union test data; printf( 'data size : %d\n', sizeof(data)); return 0; }
/*beginner/union/union3.c*/ #include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main() { union Data data; data.i = 123; printf('data.i : %d\n', data.i); data.f = 456.0; printf('data.f : %f\n', data.f); strcpy(data.str, 'Hello World'); printf('data.str : %s\n', data.str); return 0; }
编译运行
$ ./union2 data.i : 1819043144 data.f : 1143139122437582505939828736.000000 data.str : Hello World
$ ./union3 data.i : 123 data.f : 456.000000 data.str : Hello World 除了共用体还有什么可以节省存储C语言的结构体位域
typedef struct { type name : width; }
/*beginner/struct/struct6.c*/ #include <stdio.h>
int main() {
typedef struct { unsigned int red; unsigned int green; unsigned int yellow; } TrafficLight;
TrafficLight trafficlight;
printf('The size of TrafficLight %d\n', sizeof(trafficlight));
typedef struct { unsigned int red : 1; unsigned int green : 1; unsigned int yellow : 1; } TrafficLight1;
TrafficLight1 trafficlight1;
printf('The size of TrafficLight1 %d\n', sizeof(trafficlight1));
return 0; } 编译运行
运行输出如下: $ ./struct6 The size of TrafficLight 12 The size of TrafficLight1 4 扩展既然位域指定了长度位,所以就涉及到万一赋值超过了会发生什么情况,可以通过给红绿灯赋一个大值看看。 比如复制一个2,那么会得到如下警告:
|
|
来自: 西北望msm66g9f > 《编程》