非常教程

C 教程教程

C 共用体

C 共用体

C 共用体

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

定义共用体

为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:

union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];

union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,您可以指定一个或多个共用体变量,这是可选的。下面定义一个名为 Data 的共用体类型,有三个成员 i、f 和 str:

union Data { int i; float f; char str[20]; } data;

现在,Data 类型的变量可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个变量(相同的内存位置)可以存储多个多种类型的数据。您可以根据需要在一个共用体内使用任何内置的或者用户自定义的数据类型。

共用体占用的内存应足够存储共用体中最大的成员。例如,在上面的实例中,Data 将占用 20 个字节的内存空间,因为在各个成员中,字符串所占用的空间是最大的。下面的实例将显示上面的共用体占用的总内存大小:

实例

#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

Memory size occupied by data : 20

访问共用体成员

为了访问共用体的成员,我们使用成员访问运算符(.)。成员访问运算符是共用体变量名称和我们要访问的共用体成员之间的一个句号。您可以使用 union 关键字来定义共用体类型的变量。下面的实例演示了共用体的用法:

实例

#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); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

在这里,我们可以看到共用体的 if 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 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); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

data.i : 10
data.f : 220.500000
data.str : C Programming

在这里,所有的成员都能完好输出,因为同一时间只用到一个成员。

C 共用体
C 教程

C 语言是一种通用的、面向过程式的计算机程序设计语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐。

C 教程目录

1.C 基本语法
2.C 程序结构
3.C 环境设置
4.C 简介
5.C 作用域规则
6.C 函数
7.C 运算符
8.C 存储类
9.C 常量
10.C 头文件
11.C 预处理器
12.C 文件读写
13.C 输入 & 输出
14.C typedef
15.C 位域
16.C 共用体
17.C 结构体
18.C 指针
19.C 命令行参数
20.C 内存管理
21.C 可变参数
22.C 错误处理
23.C do…while 循环
24.C for 循环
25.C while 循环
26.C 嵌套 switch 语句
27.C switch 语句
28.C 嵌套 if 语句
29.C if…else 语句
30.C if 语句
31.C 指向数组的指针
32.C 从函数返回数组
33.C 传递数组给函数
34.C 多维数组
35.C 引用方式调用函数
36.C 传值方式调用函数
37.C goto 语句
38.C continue 语句
39.C break 语句
40.C 嵌套循环
41.C 从函数返回指针
42.C 传递指针给函数
43.C 指向指针的指针
44.C 指针数组
45.C 指针的算术运算
46.C 标准库 – <limits.h>
47.C 标准库 – <setjmp.h>
48.C 标准库 – <float.h>
49.C 标准库 – <errno.h>
50.C 标准库 – <ctype.h>
51.C 标准库 – <assert.h>
52.C 标准库 – 参考手册
53.C 库宏 – assert()
54.C 标准库 – <time.h>
55.C 标准库 – <string.h>
56.C 标准库 – <stdlib.h>
57.C 标准库 – <stdio.h>
58.C 标准库 – <stddef.h>
59.C 标准库 – <stdarg.h>
60.C 标准库 – <signal.h>
61.C 标准库 – <math.h>
62.C 标准库 – <locale.h>
63.C 库函数 – isspace()
64.C 库函数 – ispunct()
65.C 库函数 – isprint()
66.C 库函数 – islower()
67.C 库函数 – isgraph()
68.C 库函数 – isdigit()
69.C 库函数 – iscntrl()
70.C 库函数 – isalpha()
71.C 库函数 – isalnum()
72.C 库函数 – setlocale()
73.C 库宏 – ERANGE
74.C 库宏 – EDOM
75.C 库宏 – errno
76.C 库函数 – toupper()
77.C 库函数 – tolower()
78.C 库函数 – isxdigit()
79.C 库函数 – isupper()
80.C 库函数 – tanh()
81.C 库函数 – sinh()
82.C 库函数 – sin()
83.C 库函数 – cosh()
84.C 库函数 – cos()
85.C 库函数 – atan2()
86.C 库函数 – atan()
87.C 库函数 – asin()
88.C 库函数 – acos()
89.C 库函数 – localeconv()
90.C 库函数 – fabs()
91.C 库函数 – ceil()
92.C 库函数 – sqrt()
93.C 库函数 – pow()
94.C 库函数 – modf()
95.C 库函数 – log10()
96.C 库函数 – log()
97.C 库函数 – ldexp()
98.C 库函数 – frexp()
99.C 库函数 – exp()
100.C 库函数 – fmod()