📄 43.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="Author" content="wdg">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>网上学堂 --> C语言编程宝典之一 -->联 合(union)</title>
</head>
<body>
<p> </p>
<div align="center"><center>
<table border="1" cellpadding="4" width="640"
bordercolordark="#FFFFFF" bordercolorlight="#FFFFFF">
<tr>
<td bgcolor="#FFE6B0" bordercolor="#8080FF" class="p9"><font
color="#BB0000">导航条:--></font> <a
href="../../index.html">网上学堂</a> --> <a
href="../tcindex.htm"><font face="宋体">C</font>语言编程宝典之一</a>
-->联 合(union)</td>
</tr>
<tr>
<td bordercolor="#8080FF" class="p9"><p> </p>
<p> 1.
联合说明和联合变量定义 <br>
联合也是一种新的数据类型,
它是一种特殊形式的变量。 <br>
联合说明和联合变量定义与结构十分相似。其形式为:
<br>
union 联合名{ <br>
数据类型 成员名; <br>
数据类型 成员名; <br>
... <br>
} 联合变量名; <br>
联合表示几个变量公用一个内存位置,
在不同的时间保存不同的数据类型 <br>
和不同长度的变量。 <br>
下例表示说明一个联合a_bc: <br>
union a_bc{ <br>
int i; <br>
char mm; <br>
}; <br>
再用已说明的联合可定义联合变量。 <br>
例如用上面说明的联合定义一个名为lgc的联合变量,
可写成: <br>
union a_bc lgc; <br>
在联合变量lgc中, 整型量i和字符mm公用同一内存位置。
<br>
当一个联合被说明时,
编译程序自动地产生一个变量,
其长度为联合中最大 <br>
的变量长度。 <br>
联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,
<br>
但定义为指针时, 也要用"->"符号,
此时联合访问成员可表示成: <br>
联合名->成员名 <br>
另外,
联合既可以出现在结构内,
它的成员也可以是结构。 <br>
例如: <br>
struct{ <br>
int age; <br>
char *addr; <br>
union{ <br>
int i; <br>
char *ch; <br>
}x; <br>
}y[10]; <br>
若要访问结构变量y[1]中联合x的成员i,
可以写成: <br>
y[1].x.i; <br>
若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:
<br>
*y[2].x.ch; <br>
若写成"y[2].x.*ch;"是错误的。
</p>
<p> 2. 结构和联合的区别 <br>
结构和联合有下列区别: <br>
1.
结构和联合都是由多个不同的数据类型成员组成,
但在任何同一时刻, <br>
联合中只存放了一个被选中的成员,
而结构的所有成员都存在。 <br>
2. 对于联合的不同成员赋值,
将会对其它成员重写,
原来成员的值就不存 <br>
在了,
而对于结构的不同成员赋值是互不影响的。
<br>
下面举一个例了来加对深联合的理解。 <br>
例4: <br>
main() <br>
{ <br>
union{
/*定义一个联合*/ <br>
int i; <br>
struct{
/*在联合中定义一个结构*/ <br>
char first; <br>
char second; <br>
}half; <br>
}number; <br>
number.i=0x4241;
/*联合成员赋值*/ <br>
printf("%c%c\n", number.half.first,
mumber.half.second); <br>
number.half.first='a'; /*联合中结构成员赋值*/
<br>
number.half.second='b'; <br>
printf("%x\n", number.i); <br>
getch(); <br>
} <br>
输出结果为: <br>
AB <br>
6261 <br>
从上例结果可以看出: 当给i赋值后,
其低八位也就是first和second的值; <br>
当给first和second赋字符后, 这两个字符的ASCII码也将作为i
的低八位和高八 <br>
位。 <br>
</p>
</td>
</tr>
</table>
</center></div><div align="center"><center>
<table border="0" cellspacing="1" width="640">
<tr>
<td class="p9" height="60"> <script>document.write("<p><a href=\"http://view.gznet.com/cgi-bin/rl_views.cgi?UID=10013421\" target=sxrl>");
document.write("<img src=\"http://refer.gznet.com/cgi-bin/rl_refer2.cgi?UID=10013421&refer="+escape(top.document.referrer)+"\" width=1 height=1 border=0 alt=\" \">");
document.write("</a>");
</script></td>
</tr>
</table>
</center></div>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -