Files
hustoj/web/cppreference-zh/chmhelp/c-language-union.html
2025-08-01 12:57:54 +08:00

186 lines
15 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#32852;&#21512;&#20307;&#22768;&#26126;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_union skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#32852;&#21512;&#20307;&#22768;&#26126;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="c.html">c</a>&lrm; | <a href="c-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#32852;&#21512;&#20307;&#26159;&#30001;&#19968;&#24207;&#21015;&#30340;&#25104;&#21592;&#25152;&#32452;&#25104;&#30340;&#31867;&#22411;&#65292;&#25104;&#21592;&#30340;&#23384;&#20648;&#37325;&#21472;&#65288;&#19982;&#32467;&#26500;&#20307;&#30456;&#21453;&#65292;&#32467;&#26500;&#20307;&#26159;&#30001;&#19968;&#24207;&#21015;&#30340;&#25104;&#21592;&#25152;&#26500;&#25104;&#30340;&#31867;&#22411;&#65292;&#25104;&#21592;&#30340;&#23384;&#20648;&#20197;&#39034;&#24207;&#20998;&#37197;&#65289;&#12290;&#22312;&#20219;&#19968;&#26102;&#21051;&#65292;&#26368;&#22810;&#33021;&#22312;&#32852;&#21512;&#20307;&#20013;&#23384;&#20648;&#20854;&#19968;&#20010;&#25104;&#21592;&#30340;&#20540;&#12290;</p>
<p>&#32852;&#21512;&#20307;&#30340;<a href="c-language-declarations.html">&#31867;&#22411;&#35828;&#26126;&#31526;</a>&#19982; <a href="c-language-struct.html"><code>struct</code></a> &#31867;&#22411;&#35828;&#26126;&#31526;&#30456;&#21516;&#65292;&#21482;&#26159;&#25152;&#29992;&#30340;&#20851;&#38190;&#35789;&#26377;&#21035;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>union</b></code> <span class="t-spar">&#23646;&#24615;&#22768;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#21517;&#23383;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>{</b></code> <span class="t-spar">&#32467;&#26500;&#20307;&#22768;&#26126;&#21015;&#34920;</span> <code><b>}</b></code></td>
<td>(1)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>union</b></code> <span class="t-spar">&#23646;&#24615;&#22768;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#21517;&#23383;</span></td>
<td>(2)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#21517;&#23383;</span></td>
<td>-</td>
<td>&#27491;&#22312;&#23450;&#20041;&#30340;&#32852;&#21512;&#20307;&#21517;&#31216;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#32467;&#26500;&#20307;&#22768;&#26126;&#21015;&#34920;</span></td>
<td>-</td>
<td>&#20219;&#24847;&#25968;&#37327;&#30340;&#21464;&#37327;&#22768;&#26126;&#12289;<a href="c-language-bit_field.html">&#20301;&#22495;</a>&#22768;&#26126;&#21644;<a href="c-language-_Static_assert.html">&#38745;&#24577;&#26029;&#35328;</a>&#22768;&#26126;&#12290;&#19981;&#20801;&#35768;&#19981;&#23436;&#25972;&#31867;&#22411;&#30340;&#25104;&#21592;&#21644;&#20989;&#25968;&#31867;&#22411;&#30340;&#25104;&#21592;&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;&#22768;&#26126;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>&#21487;&#36873;&#30340;<a href="c-language-attributes.html">&#23646;&#24615;</a>&#21015;&#34920;&#65292;&#24212;&#29992;&#21040;&#32852;&#21512;&#20307;&#31867;&#22411;&#65292;&#33509;&#36825;&#31181;&#24418;&#24335;&#19981;&#21518;&#38543; <code><b>;</b></code> &#65288;&#21363;&#19981;&#26159;&#21069;&#32622;&#22768;&#26126;&#65289;&#21017;&#23545;&#20110; <span class="t-v">(2)</span> &#19981;&#20801;&#35768;&#12290;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#32852;&#21512;&#20307;&#21482;&#22823;&#21040;&#36275;&#20197;&#20445;&#26377;&#20854;&#26368;&#22823;&#25104;&#21592;&#65288;&#20134;&#21487;&#33021;&#28155;&#21152;&#39069;&#22806;&#30340;&#23614;&#38543;&#22635;&#20805;&#23383;&#33410;&#65289;&#12290;&#20854;&#20182;&#25104;&#21592;&#34987;&#20998;&#37197;&#20110;&#19982;&#35813;&#26368;&#22823;&#25104;&#21592;&#19968;&#37096;&#20998;&#30456;&#21516;&#30340;&#23383;&#33410;&#20013;&#12290;</p>
<p>&#33021;&#36716;&#22411;&#25351;&#21521;&#32852;&#21512;&#20307;&#30340;&#25351;&#38024;&#20026;&#25351;&#21521;&#23427;&#27599;&#20010;&#25104;&#21592;&#30340;&#25351;&#38024;&#65288;&#33509;&#32852;&#21512;&#20307;&#25317;&#26377;&#20301;&#22495;&#25104;&#21592;&#65292;&#21017;&#33021;&#36716;&#22411;&#25351;&#21521;&#32852;&#21512;&#20307;&#30340;&#25351;&#38024;&#20026;&#25351;&#21521;&#20301;&#22495;&#24213;&#23618;&#31867;&#22411;&#30340;&#25351;&#38024;&#65289;&#12290;&#31867;&#20284;&#22320;&#65292;&#25351;&#21521;&#32467;&#26500;&#20307;&#20219;&#20309;&#25104;&#21592;&#30340;&#25351;&#38024;&#37117;&#33021;&#34987;&#36716;&#22411;&#20026;&#25351;&#21521;&#25972;&#20010;&#32467;&#26500;&#20307;&#30340;&#25351;&#38024;&#12290;</p>
<p>&#33509;&#29992;&#20110;&#35775;&#38382;&#20869;&#23481;&#30340;&#32852;&#21512;&#20307;&#25104;&#21592;&#19981;&#21516;&#20110;&#19978;&#27425;&#29992;&#20110;&#23384;&#20648;&#20540;&#30340;&#25104;&#21592;&#65292;&#21017;&#36716;&#35793;&#34987;&#23384;&#20648;&#20540;&#30340;&#23545;&#35937;&#34920;&#31034;&#20026;&#26032;&#31867;&#22411;&#30340;&#23545;&#35937;&#34920;&#31034;&#65288;&#36825;&#34987;&#31216;&#20026;<i>&#31867;&#22411;&#21452;&#20851;</i>&#65289;&#12290;&#33509;&#26032;&#31867;&#22411;&#30340;&#22823;&#23567;&#22823;&#20110;&#19978;&#27425;&#20889;&#20837;&#30340;&#31867;&#22411;&#22823;&#23567;&#65292;&#21017;&#22810;&#20986;&#30340;&#23383;&#33410;&#20869;&#23481;&#26159;&#26410;&#25351;&#26126;&#30340;&#65288;&#32780;&#19988;&#21487;&#20197;&#26159;&#38519;&#38449;&#34920;&#31034;&#65289;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-c11">
<td>
<p>&#31867;&#20284;&#32467;&#26500;&#20307;&#65292;&#31867;&#22411;&#20026;&#19981;&#24102; <span class="t-spar">name</span> &#30340;&#32852;&#21512;&#20307;&#30340;&#26080;&#21517;&#32852;&#21512;&#20307;&#25104;&#21592;&#34987;&#31216;&#20026;<i>&#21311;&#21517;&#32852;&#21512;&#20307;</i>&#12290;&#27599;&#20010;&#21311;&#21517;&#32852;&#21512;&#20307;&#30340;&#25104;&#21592;&#34987;&#35748;&#20026;&#26159;&#22806;&#22260;&#32467;&#26500;&#20307;&#25110;&#32852;&#21512;&#20307;&#30340;&#25104;&#21592;&#12290;&#33509;&#22806;&#22260;&#32467;&#26500;&#20307;&#25110;&#32852;&#21512;&#20307;&#20134;&#20026;&#21311;&#21517;&#65292;&#21017;&#36882;&#24402;&#35843;&#29992;&#27492;&#35268;&#21017;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">struct</span> v <span class="br0">{</span>
<span class="kw1">union</span> <span class="br0">{</span> <span class="co1">// &#21311;&#21517;&#32852;&#21512;&#20307;</span>
<span class="kw1">struct</span> <span class="br0">{</span> <span class="kw4">int</span> i, j<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#21311;&#21517;&#32467;&#26500;&#20307;</span>
<span class="kw1">struct</span> <span class="br0">{</span> <span class="kw4">long</span> k, l<span class="sy4">;</span> <span class="br0">}</span> w<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> m<span class="sy4">;</span>
<span class="br0">}</span> v1<span class="sy4">;</span>
v1.<span class="me1">i</span> <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">// &#21512;&#27861;</span>
v1.<span class="me1">k</span> <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="co1">// &#38750;&#27861;&#65306;&#20869;&#23618;&#32467;&#26500;&#20307;&#19981;&#26159;&#21311;&#21517;&#30340;</span>
v1.<span class="me1">w</span>.<span class="me1">k</span> <span class="sy1">=</span> <span class="nu0">5</span><span class="sy4">;</span> <span class="co1">// &#21512;&#27861;</span></pre></div>
</div>
<p>&#31867;&#20284;&#32467;&#26500;&#20307;&#65292;&#33509;&#19981;&#20197;&#20219;&#20309;&#20855;&#21517;&#25104;&#21592;&#65288;&#21253;&#21547;&#32463;&#30001;&#21311;&#21517;&#23884;&#22871;&#32467;&#26500;&#20307;&#25110;&#32852;&#21512;&#20307;&#33719;&#24471;&#30340;&#25104;&#21592;&#65289;&#23450;&#20041;&#32852;&#21512;&#20307;&#65292;&#21017;&#31243;&#24207;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.85.B3.E9.94.AE.E8.AF.8D">&#20851;&#38190;&#35789;</span></h3>
<p><a href="c-keyword-union.html"><tt>union</tt></a></p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#20851;&#20110;&#32467;&#26500;&#20307;&#21644;&#32852;&#21512;&#20307;&#21021;&#22987;&#21270;&#30340;&#35268;&#21017;&#65292;&#35265;<a href="c-language-struct_initialization.html">&#32467;&#26500;&#20307;&#21021;&#22987;&#21270;</a>&#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="co2">#include &lt;stdio.h&gt;</span>
<span class="co2">#include &lt;stdint.h&gt;</span>
<span class="co2">#include &lt;assert.h&gt;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">union</span> S <span class="br0">{</span>
<a href="c-types-integer.html"><span class="kw122">uint32_t</span></a> u32<span class="sy4">;</span>
<a href="c-types-integer.html"><span class="kw121">uint16_t</span></a> u16<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy4">;</span>
<a href="c-types-integer.html"><span class="kw120">uint8_t</span></a> u8<span class="sy4">;</span>
<span class="br0">}</span> s <span class="sy1">=</span> <span class="br0">{</span><span class="nu12">0x12345678</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// s.u32 &#29616;&#20026;&#27963;&#36291;&#25104;&#21592;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;Union S has size %zu and holds %x<span class="es1">\n</span>&quot;</span>, <span class="kw4">sizeof</span> s, s.<span class="me1">u32</span><span class="br0">)</span><span class="sy4">;</span>
s.<span class="me1">u16</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu12">0x0011</span><span class="sy4">;</span> <span class="co1">// s.u16 &#29616;&#20026;&#27963;&#36291;&#25104;&#21592;</span>
<span class="co1">// &#20174; s.u32 &#25110; s.u8 &#30340;&#35835;&#21462;&#36716;&#35793;&#23545;&#35937;&#34920;&#31034;</span>
<span class="co1">// printf(&quot;s.u8 is now %x\n&quot;, s.u8); // &#26410;&#25351;&#23450;&#65292;&#20856;&#22411;&#32467;&#26524;&#26159; 11 &#25110; 00</span>
<span class="co1">// printf(&quot;s.u32 is now %x\n&quot;, s.u32); // &#26410;&#25351;&#23450;&#65292;&#20856;&#22411;&#32467;&#26524;&#26159; 12340011 &#25110; 00115678</span>
<span class="co1">// &#25351;&#21521;&#32852;&#21512;&#20307;&#25152;&#26377;&#25104;&#21592;&#30340;&#25351;&#38024;&#24444;&#27492;&#38388;&#27604;&#36739;&#30456;&#31561;&#65292;&#20063;&#19982;&#25351;&#21521;&#32852;&#21512;&#20307;&#30340;&#25351;&#38024;&#27604;&#36739;&#30456;&#31561;</span>
<a href="c-error-assert.html"><span class="kw407">assert</span></a><span class="br0">(</span><span class="br0">(</span><a href="c-types-integer.html"><span class="kw120">uint8_t</span></a><span class="sy2">*</span><span class="br0">)</span><span class="sy3">&amp;</span>s <span class="sy1">==</span> <span class="sy3">&amp;</span>s.<span class="me1">u8</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#27492;&#32852;&#21512;&#20307;&#25317;&#26377;&#23614;&#38543;&#30340; 3 &#20010;&#22635;&#20805;&#23383;&#33410;</span>
<span class="kw1">union</span> pad <span class="br0">{</span>
<span class="kw4">char</span> c<span class="br0">[</span><span class="nu0">5</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#21344;&#25454; 5 &#23383;&#33410;</span>
<span class="kw4">float</span> f<span class="sy4">;</span> <span class="co1">// &#21344;&#25454; 4 &#23383;&#33410;&#65292;&#38544;&#21547;&#23545;&#40784; 4</span>
<span class="br0">}</span> p <span class="sy1">=</span> <span class="br0">{</span>.<span class="me1">f</span> <span class="sy1">=</span> <span class="nu16">1.23</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#22823;&#23567;&#20026; 8 &#20197;&#28385;&#36275; float &#30340;&#23545;&#40784;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;size of union of char[5] and float is %zu<span class="es1">\n</span>&quot;</span>, <span class="kw4">sizeof</span> p<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#21487;&#33021;&#30340;&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">Union S has size 4 and holds 12345678
size of union of char[5] and float is 8</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<div class="t-ref-std-17">
<ul>
<li>C17 &#26631;&#20934;&#65288;ISO/IEC 9899:2018&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.7.2.1 Structure and union specifiers (p: 81-84)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-11">
<ul>
<li>C11 &#26631;&#20934;&#65288;ISO/IEC 9899:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.7.2.1 Structure and union specifiers (p: 112-117)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c99">
<ul>
<li>C99 &#26631;&#20934;&#65288;ISO/IEC 9899:1999&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.7.2.1 Structure and union specifiers (p: 101-104)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c89">
<ul>
<li>C89/C90 &#26631;&#20934;&#65288;ISO/IEC 9899:1990&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3.5.2.1 Structure and union specifiers</li>
</ul>
</dd>
</dl>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>