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

132 lines
14 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>&#22797;&#21512;&#23383;&#38754;&#37327;</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_compound_literal skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#22797;&#21512;&#23383;&#38754;&#37327;</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>&#23601;&#22320;&#26500;&#36896;&#19968;&#20010;&#25351;&#23450;&#31867;&#22411;&#30340;&#26080;&#21517;&#23545;&#35937;&#65292;&#22312;&#21482;&#38656;&#35201;&#19968;&#27425;&#25968;&#32452;&#12289;&#32467;&#26500;&#20307;&#25110;&#32852;&#21512;&#20307;&#21464;&#37327;&#26102;&#20351;&#29992;&#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>(</b></code> <span class="t-spar">type</span> <code><b>)</b></code> <code><b>{</b></code> <span class="t-spar">initializer-list</span> <code><b>}</b></code></td>
<td class="t-sdsc-nopad"></td>
<td><span class="t-mark-rev t-since-c99">(C99 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#20854;&#20013;</p>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">type</span></td>
<td>-</td>
<td>&#25351;&#23450;&#20219;&#20309;&#23436;&#25972;&#23545;&#35937;&#31867;&#22411;&#25110;&#26410;&#30693;&#22823;&#23567;&#30340;&#25968;&#32452;&#30340;<a href="c-language-types.html#.E7.B1.BB.E5.9E.8B.E5.90.8D">&#31867;&#22411;&#21517;</a>&#65292;&#20294;&#19981;&#33021;&#26159; VLA</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">initializer-list</span></td>
<td>-</td>
<td>&#36866;&#21512; <span class="t-spar">type</span> &#31867;&#22411;&#21464;&#37327;<a href="c-language-initialization.html">&#21021;&#22987;&#21270;</a>&#30340;&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#22797;&#21512;&#23383;&#38754;&#37327;&#26500;&#36896;&#19968;&#20010; <span class="t-spar">type</span> &#25152;&#25351;&#23450;&#31867;&#22411;&#30340;&#26080;&#21517;&#23545;&#35937;&#65292;&#24182;&#20197; <span class="t-spar">initializer-list</span> &#30340;&#25351;&#23450;&#21021;&#22987;&#21270;&#20043;&#12290;</p>
<p>&#22797;&#21512;&#23383;&#38754;&#37327;&#30340;&#31867;&#22411;&#26159; <span class="t-spar">type</span> &#65288;&#38500;&#38750; <span class="t-spar">type</span> &#26159;&#26410;&#30693;&#22823;&#23567;&#30340;&#25968;&#32452;&#65307;&#22914;&#22312;<a href="c-language-array_initialization.html">&#25968;&#32452;&#21021;&#22987;&#21270;</a>&#20013;&#19968;&#33324;&#20174; <span class="t-spar">initializer-list</span> &#25512;&#23548;&#20986;&#20854;&#22823;&#23567;&#65289;&#12290;</p>
<p>&#22797;&#21512;&#23383;&#38754;&#37327;&#30340;&#20540;&#31867;&#21035;&#26159;<a href="c-language-value_category.html">&#24038;&#20540;</a>&#65288;&#33021;&#21462;&#20854;&#22320;&#22336;&#65289;&#12290;</p>
<p>&#33509;&#22797;&#21512;&#23383;&#38754;&#37327;&#20986;&#29616;&#20110;&#25991;&#20214;&#20316;&#29992;&#22495;&#65292;&#21017;&#20854;&#27714;&#20540;&#25152;&#24471;&#30340;&#26080;&#21517;&#23545;&#35937;&#25317;&#26377;&#38745;&#24577;<a href="c-language-storage_duration.html">&#23384;&#20648;&#26399;</a>&#65292;&#33509;&#22797;&#21512;&#23383;&#38754;&#37327;&#20986;&#29616;&#20110;&#22359;&#20316;&#29992;&#22495;&#65292;&#21017;&#35813;&#23545;&#35937;&#25317;&#26377;&#33258;&#21160;<a href="c-language-storage_duration.html">&#23384;&#20648;&#26399;</a>&#65288;&#27492;&#24773;&#20917;&#19979;&#23545;&#35937;&#30340;<a href="c-language-lifetime.html">&#29983;&#23384;&#26399;</a>&#32467;&#26463;&#20110;&#22806;&#22260;&#22359;&#30340;&#32467;&#23614;&#65289;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E6.84.8F">&#27880;&#24847;</span></h3>
<p>&#23383;&#31526;&#25110;&#23485;&#23383;&#31526;&#25968;&#32452;&#31867;&#22411;&#30340; const &#38480;&#23450;&#22797;&#21512;&#23383;&#38754;&#37327;&#65292;&#21487;&#33021;&#20250;&#19982;<a href="c-language-string_literal.html">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</a>&#20849;&#20139;&#23384;&#20648;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="br0">{</span><span class="st0">&quot;abc&quot;</span><span class="br0">}</span> <span class="sy1">==</span> <span class="st0">&quot;abc&quot;</span> <span class="co1">// &#21487;&#20197;&#20026; 1 &#25110; 0 &#65292;&#23454;&#29616;&#23450;&#20041;</span></pre></div>
</div>
<p>&#27599;&#20010;&#22797;&#21512;&#23383;&#38754;&#37327;&#20165;&#22312;&#20854;&#20316;&#29992;&#22495;&#20869;&#21019;&#24314;&#19968;&#20010;&#23545;&#35937;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw4">int</span> f <span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">struct</span> s <span class="br0">{</span><span class="kw4">int</span> i<span class="sy4">;</span><span class="br0">}</span> <span class="sy2">*</span>p <span class="sy1">=</span> <span class="nu0">0</span>, <span class="sy2">*</span>q<span class="sy4">;</span>
<span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
again<span class="sy4">:</span>
q <span class="sy1">=</span> p, p <span class="sy1">=</span> <span class="sy3">&amp;</span><span class="br0">(</span><span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span><span class="br0">{</span> j<span class="sy2">++</span> <span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">if</span> <span class="br0">(</span>j <span class="sy1">&lt;</span> <span class="nu0">2</span><span class="br0">)</span> <span class="kw1">goto</span> again<span class="sy4">;</span> <span class="co1">// &#27880;&#24847;&#65306;&#33509;&#20351;&#29992;&#24490;&#29615;&#65292;&#21017;&#20854;&#20316;&#29992;&#22495;&#20250;&#32467;&#26463;&#20110;&#27492;&#65292;</span>
<span class="co1">// &#36825;&#20250;&#32456;&#27490;&#22797;&#21512;&#23383;&#38754;&#37327;&#30340;&#29983;&#23384;&#26399;&#65292;</span>
<span class="co1">// &#20196; p &#20026;&#24748;&#22402;&#25351;&#38024;</span>
<span class="kw1">return</span> p <span class="sy1">==</span> q <span class="sy3">&amp;&amp;</span> q<span class="sy2">-</span><span class="sy1">&gt;</span>i <span class="sy1">==</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#22987;&#32456;&#36820;&#22238; 1</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#22240;&#20026;&#22797;&#21512;&#23383;&#38754;&#37327;&#26159;&#26080;&#21517;&#30340;&#65292;&#19968;&#20010;&#22797;&#21512;&#23383;&#38754;&#37327;&#19981;&#33021;&#24341;&#29992;&#33258;&#36523;&#65288;&#19968;&#20010;&#20855;&#21517;&#32467;&#26500;&#20307;&#21487;&#20197;&#21253;&#21547;&#25351;&#21521;&#20854;&#33258;&#36523;&#30340;&#25351;&#38024;&#65289;&#12290;</p>
<p>&#34429;&#28982;&#22797;&#21512;&#23383;&#38754;&#37327;&#30340;&#35821;&#27861;&#21644;<a href="c-language-cast.html">&#36716;&#22411;</a>&#30456;&#20284;&#65292;&#37325;&#35201;&#30340;&#21306;&#21035;&#26159;&#36716;&#22411;&#26159;&#38750;&#24038;&#20540;&#34920;&#36798;&#24335;&#65292;&#32780;&#22797;&#21512;&#23383;&#38754;&#37327;&#26159;&#24038;&#20540;&#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="kw4">int</span> <span class="sy2">*</span>p <span class="sy1">=</span> <span class="br0">(</span><span class="kw4">int</span><span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="br0">{</span><span class="nu0">2</span>, <span class="nu0">4</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#21019;&#24314;&#19968;&#20010;&#26080;&#21517;&#30340; int[2] &#31867;&#22411;&#38745;&#24577;&#23384;&#20648;&#25968;&#32452;</span>
<span class="co1">// &#21021;&#22987;&#25968;&#32452;&#20026;&#20540; {2, 4}</span>
<span class="co1">// &#21019;&#24314;&#25351;&#21521;&#25968;&#32452;&#39318;&#20803;&#32032;&#30340;&#25351;&#38024; p</span>
<span class="kw4">const</span> <span class="kw4">float</span> <span class="sy2">*</span>pc <span class="sy1">=</span> <span class="br0">(</span><span class="kw4">const</span> <span class="kw4">float</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="br0">{</span><span class="nu19">1e0</span>, <span class="nu19">1e1</span>, <span class="nu19">1e2</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#21482;&#35835;&#22797;&#21512;&#23383;&#38754;&#37327;</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="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">2</span>, <span class="sy2">*</span>p <span class="sy1">=</span> <span class="sy3">&amp;</span>n<span class="sy4">;</span>
p <span class="sy1">=</span> <span class="br0">(</span><span class="kw4">int</span> <span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="br0">)</span><span class="br0">{</span><span class="sy2">*</span>p<span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#21019;&#24314;&#19968;&#20010;&#26080;&#21517;&#30340; int[2] &#31867;&#22411;&#33258;&#21160;&#23384;&#20648;&#25968;&#32452;</span>
<span class="co1">// &#21021;&#22987;&#21270;&#39318;&#20010;&#20803;&#32032;&#20026;&#20043;&#21069; *p &#25152;&#25345;&#26377;&#30340;&#20540;</span>
<span class="co1">// &#21021;&#22987;&#21270;&#31532;&#20108;&#20010;&#20803;&#32032;&#20026;&#38646;</span>
<span class="co1">// &#23558;&#39318;&#20803;&#32032;&#30340;&#22320;&#22336;&#23384;&#20648;&#21040; p</span>
<span class="kw1">struct</span> point <span class="br0">{</span><span class="kw4">double</span> x,y<span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> drawline1<span class="br0">(</span><span class="kw1">struct</span> point from, <span class="kw1">struct</span> point to<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> drawline2<span class="br0">(</span><span class="kw1">struct</span> point <span class="sy2">*</span>from, <span class="kw1">struct</span> point <span class="sy2">*</span>to<span class="br0">)</span><span class="sy4">;</span>
drawline1<span class="br0">(</span><span class="br0">(</span><span class="kw1">struct</span> point<span class="br0">)</span><span class="br0">{</span>.<span class="me1">x</span><span class="sy1">=</span><span class="nu0">1</span>, .<span class="me1">y</span><span class="sy1">=</span><span class="nu0">1</span><span class="br0">}</span>, <span class="co1">// &#21019;&#24314;&#20108;&#20010;&#22359;&#20316;&#29992;&#22495;&#30340;&#32467;&#26500;&#20307;</span>
<span class="br0">(</span><span class="kw1">struct</span> point<span class="br0">)</span><span class="br0">{</span>.<span class="me1">x</span><span class="sy1">=</span><span class="nu0">3</span>, .<span class="me1">y</span><span class="sy1">=</span><span class="nu0">4</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#28982;&#21518;&#35843;&#29992; drawline1 &#65292;&#20197;&#20540;&#20256;&#36882;</span>
drawline2<span class="br0">(</span><span class="sy3">&amp;</span><span class="br0">(</span><span class="kw1">struct</span> point<span class="br0">)</span><span class="br0">{</span>.<span class="me1">x</span><span class="sy1">=</span><span class="nu0">1</span>, .<span class="me1">y</span><span class="sy1">=</span><span class="nu0">1</span><span class="br0">}</span>, <span class="co1">// &#21019;&#24314;&#20108;&#20010;&#22359;&#20316;&#29992;&#22495;&#30340;&#32467;&#26500;&#20307;</span>
<span class="sy3">&amp;</span><span class="br0">(</span><span class="kw1">struct</span> point<span class="br0">)</span><span class="br0">{</span>.<span class="me1">x</span><span class="sy1">=</span><span class="nu0">3</span>, .<span class="me1">y</span><span class="sy1">=</span><span class="nu0">4</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#28982;&#21518;&#35843;&#29992; drawline2 &#65292;&#20256;&#36882;&#20854;&#22320;&#22336;</span>
<span class="br0">}</span></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-11">
<ul>
<li>C11 &#26631;&#20934;&#65288;ISO/IEC 9899:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.5.2.5 Compound literals (p: 85-87)</li>
</ul>
</dd>
</dl>
<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.5.2.5 Compound literals (p: 75-77)</li>
</ul>
</dd>
</dl>
</div>
</div>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>