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

271 lines
30 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>&#32467;&#26500;&#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_struct skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#32467;&#26500;&#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>&#32467;&#26500;&#20307;&#26159;&#19968;&#31181;&#30001;&#19968;&#24207;&#21015;&#30340;&#25104;&#21592;&#32452;&#25104;&#30340;&#31867;&#22411;&#65292;&#25104;&#21592;&#30340;&#23384;&#20648;&#20197;&#39034;&#24207;&#20998;&#37197;&#20110;&#20869;&#23384;&#20013;&#65288;&#19982;&#32852;&#21512;&#20307;&#30456;&#21453;&#65292;&#32852;&#21512;&#20307;&#26159;&#30001;&#19968;&#20010;&#24207;&#21015;&#30340;&#25104;&#21592;&#32452;&#25104;&#30340;&#31867;&#22411;&#65292;&#25104;&#21592;&#23384;&#20648;&#22312;&#20869;&#23384;&#20013;&#37325;&#21472;&#65289;&#12290;</p>
<p>&#32467;&#26500;&#20307;&#30340;<a href="c-language-declarations.html">&#31867;&#22411;&#35828;&#26126;&#31526;</a>&#19982;<a href="c-language-union.html">&#32852;&#21512;&#20307;&#65288; <code>union</code> &#65289;</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>struct</b></code> <span class="t-spar">&#23646;&#24615;&#35828;&#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>struct</b></code> <span class="t-spar">&#23646;&#24615;&#35828;&#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>
<div class="t-li1"><span class="t-li">1)</span> &#32467;&#26500;&#20307;&#23450;&#20041;&#65306;&#24341;&#20837;&#19968;&#20010;&#26032;&#31867;&#22411; struct <span class="t-spar">&#21517;&#23383;</span> &#24182;&#23450;&#20041;&#20854;&#21547;&#20041;</div>
<div class="t-li1"><span class="t-li">2)</span> &#33509;&#20165;&#22312;&#20854;&#33258;&#36523;&#30340;&#34892;&#20351;&#29992;&#65292;&#22914;&#22312; <code>struct</code> <span class="t-spar">&#21517;&#23383;</span> <code><b>;</b></code> &#20013;&#65292;<i>&#22768;&#26126;</i>&#20294;&#19981;&#23450;&#20041; struct <code>name</code> &#65288;&#35265;&#19979;&#26041;&#21069;&#32622;&#22768;&#26126;&#65289;&#12290;&#22312;&#20854;&#20182;&#35821;&#22659;&#20013;&#65292;&#21629;&#21517;&#20808;&#21069;&#22768;&#26126;&#30340;&#32467;&#26500;&#20307;&#65292;&#24182;&#19988;&#19981;&#20801;&#35768; <span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span> &#12290;</div>
<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;&#32467;&#26500;&#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;&#65288;&#38500;&#20102;&#19979;&#38754;&#25551;&#36848;&#30340;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#65289;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span><a href="c-language-attributes.html">&#23646;&#24615;</a>&#30340;&#21487;&#36873;&#21015;&#34920;&#65292;&#24212;&#29992;&#21040;&#32467;&#26500;&#20307;&#31867;&#22411;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#22312;&#32467;&#26500;&#20307;&#23545;&#35937;&#20869;&#65292;&#20854;&#25104;&#21592;&#30340;&#22320;&#22336;&#65288;&#21450;&#20301;&#22495;&#20998;&#37197;&#21333;&#20803;&#30340;&#22320;&#22336;&#65289;&#25353;&#29031;&#25104;&#21592;&#23450;&#20041;&#30340;&#39034;&#24207;&#36882;&#22686;&#12290;&#33021;&#36716;&#22411;&#25351;&#21521;&#32467;&#26500;&#20307;&#30340;&#25351;&#38024;&#20026;&#25351;&#21521;&#20854;&#39318;&#25104;&#21592;&#65288;&#25110;&#32773;&#33509;&#39318;&#25104;&#21592;&#20026;&#20301;&#22495;&#65292;&#21017;&#25351;&#21521;&#20854;&#20998;&#37197;&#21333;&#20803;&#65289;&#30340;&#25351;&#38024;&#12290;&#31867;&#20284;&#22320;&#65292;&#33021;&#36716;&#22411;&#25351;&#21521;&#32467;&#26500;&#20307;&#39318;&#25104;&#21592;&#30340;&#25351;&#38024;&#20026;&#25351;&#21521;&#25972;&#20010;&#32467;&#26500;&#20307;&#30340;&#25351;&#38024;&#12290;&#22312;&#20219;&#24847;&#20108;&#20010;&#25104;&#21592;&#38388;&#21644;&#26368;&#21518;&#30340;&#25104;&#21592;&#21518;&#21487;&#33021;&#23384;&#22312;&#26080;&#21517;&#30340;&#22635;&#20805;&#23383;&#33410;&#65292;&#20294;&#39318;&#25104;&#21592;&#21069;&#19981;&#20250;&#26377;&#12290;&#32467;&#26500;&#20307;&#30340;&#22823;&#23567;&#33267;&#23569;&#19982;&#20854;&#25104;&#21592;&#30340;&#22823;&#23567;&#20043;&#21644;&#19968;&#26679;&#22823;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-c99">
<td>
<p>&#33509;&#32467;&#26500;&#20307;&#23450;&#20041;&#20102;&#33267;&#23569;&#19968;&#20010;&#20855;&#21517;&#25104;&#21592;&#65292;&#21017;&#39069;&#22806;&#22768;&#26126;&#20854;&#26368;&#21518;&#25104;&#21592;&#25317;&#26377;&#19981;&#23436;&#25972;&#30340;&#25968;&#32452;&#31867;&#22411;&#12290;&#35775;&#38382;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#30340;&#20803;&#32032;&#26102;&#65288;&#22312;&#20197;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#21517;&#20026; <code><b>.</b></code> &#25110; <code><b>-&gt;</b></code> &#30340;&#21491;&#20391;&#36816;&#31639;&#25968;&#30340;&#34920;&#36798;&#24335;&#20013;&#65289;&#65292;&#32467;&#26500;&#20307;&#34920;&#29616;&#24471;&#22914;&#21516;&#35813;&#25968;&#32452;&#25104;&#21592;&#25317;&#26377;&#20026;&#27492;&#23545;&#35937;&#20998;&#37197;&#30340;&#20869;&#23384;&#20013;&#26368;&#38271;&#30340;&#36866;&#21512;&#22823;&#23567;&#12290;&#33509;&#26410;&#20998;&#37197;&#39069;&#22806;&#23384;&#20648;&#65292;&#21017;&#23427;&#34920;&#29616;&#20026;&#22914;&#21516;&#26377; 1 &#20010;&#20803;&#32032;&#30340;&#25968;&#32452;&#65292;&#38500;&#20102;&#33509;&#35775;&#38382;&#35813;&#20803;&#32032;&#65292;&#25110;&#20135;&#29983;&#25351;&#21521;&#35813;&#20803;&#32032;&#21518;&#19968;&#20301;&#32622;&#25351;&#38024;&#65292;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;&#21021;&#22987;&#21270;&#12289; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">sizeof</span></span></span> &#21450;&#36171;&#20540;&#36816;&#31639;&#31526;&#24573;&#30053;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#12290;&#25317;&#26377;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#30340;&#32467;&#26500;&#20307;&#65288;&#25110;&#25317;&#26377;&#21487;&#33021;&#36882;&#24402;&#30340;&#26377;&#26580;&#24615;&#25968;&#32452;&#25104;&#21592;&#30340;&#32467;&#26500;&#20307;&#25104;&#21592;&#30340;&#32852;&#21512;&#20307;&#65289;&#19981;&#33021;&#20316;&#20026;&#25968;&#32452;&#20803;&#32032;&#65292;&#25110;&#20854;&#20182;&#32467;&#26500;&#20307;&#30340;&#25104;&#21592;&#20986;&#29616;&#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> s <span class="br0">{</span> <span class="kw4">int</span> n<span class="sy4">;</span> <span class="kw4">double</span> d<span class="br0">[</span><span class="br0">]</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// s.d &#26159;&#26580;&#24615;&#25968;&#32452;&#20803;&#32032; </span>
<span class="kw1">struct</span> s t1 <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">0</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK &#65306; d &#22914;&#21516;&#20026; double d[1] &#65292;&#20294;&#35775;&#38382;&#26159; UB</span>
<span class="kw1">struct</span> s t2 <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="br0">{</span> <span class="nu16">4.2</span> <span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#21021;&#22987;&#21270;&#24573;&#30053;&#26580;&#24615;&#25968;&#32452;</span>
<span class="co1">// &#33509; sizeof (double) == 8</span>
<span class="kw1">struct</span> s <span class="sy2">*</span>s1 <span class="sy1">=</span> <a href="c-memory-malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">64</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#22914;&#21516; d &#20026; double d[8]</span>
<span class="kw1">struct</span> s <span class="sy2">*</span>s2 <span class="sy1">=</span> <a href="c-memory-malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">46</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#22914;&#21516; d &#20026; double d[5]</span>
s1 <span class="sy1">=</span> <a href="c-memory-malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#29616;&#22312;&#22914;&#21516; d &#20026; double d[1]</span>
s2 <span class="sy1">=</span> <a href="c-memory-malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">6</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21516;&#19978;&#65292;&#20294;&#35775;&#38382;&#26159; UB</span>
<span class="kw4">double</span> <span class="sy2">*</span>dp <span class="sy1">=</span> <span class="sy3">&amp;</span><span class="br0">(</span>s1<span class="sy2">-</span><span class="sy1">&gt;</span>d<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="sy2">*</span>dp <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span> <span class="co1">// OK</span>
dp <span class="sy1">=</span> <span class="sy3">&amp;</span><span class="br0">(</span>s2<span class="sy2">-</span><span class="sy1">&gt;</span>d<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="sy2">*</span>dp <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
<span class="sy2">*</span>s1 <span class="sy1">=</span> <span class="sy2">*</span>s2<span class="sy4">;</span> <span class="co1">// &#21482;&#22797;&#21046; s.n &#65292;&#27809;&#26377;&#20219;&#20309; s.d &#30340;&#20803;&#32032;</span>
<span class="co1">// &#38500;&#20102; sizeof (struct s) &#20013;&#25429;&#33719;&#30340;&#20803;&#32032;</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-c99">(C99 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-c11">
<td>
<p>&#31867;&#20284;&#32852;&#21512;&#20307;&#65292;&#31867;&#22411;&#20026;&#19981;&#24102; <span class="t-spar">&#21517;&#23383;</span> &#30340;&#32467;&#26500;&#20307;&#30340;&#26080;&#21517;&#32467;&#26500;&#20307;&#25104;&#21592;&#34987;&#31216;&#20316;<i>&#21311;&#21517;&#32467;&#26500;&#20307;</i>&#12290;&#27599;&#20010;&#21311;&#21517;&#32467;&#26500;&#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;&#24212;&#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;&#38750;&#21311;&#21517;</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;&#32852;&#21512;&#20307;&#65292;&#33509;&#19981;&#20197;&#20219;&#20309;&#20855;&#21517;&#25104;&#21592;&#23450;&#20041;&#32467;&#26500;&#20307;&#65288;&#21253;&#21547;&#32463;&#30001;&#21311;&#21517;&#23884;&#22871;&#32467;&#26500;&#20307;&#25110;&#32852;&#21512;&#20307;&#33719;&#24471;&#30340;&#25104;&#21592;&#65289;&#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.89.8D.E7.BD.AE.E5.A3.B0.E6.98.8E">&#21069;&#32622;&#22768;&#26126;</span></h3>
<p>&#19979;&#21015;&#24418;&#24335;&#30340;&#22768;&#26126;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><code><b>struct</b></code> <span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#21517;&#23383;</span> <code><b>;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#38544;&#34255;&#20219;&#20309;&#20808;&#21069;&#22312;&#26631;&#31614;&#21629;&#21517;&#31354;&#38388;&#20013;&#22768;&#26126;&#30340; <span class="t-spar">&#21517;&#23383;</span> &#30340;&#21547;&#20041;&#65292;&#24182;&#22312;&#24403;&#21069;&#20316;&#29992;&#22495;&#20013;&#22768;&#26126; <span class="t-spar">&#21517;&#23383;</span> &#20026;&#26032;&#30340;&#32467;&#26500;&#20307;&#21517;&#65292;&#21487;&#20197;&#22312;&#20043;&#21518;&#23450;&#20041;&#35813;&#32467;&#26500;&#20307;&#12290;&#22312;&#23450;&#20041;&#20986;&#29616;&#20043;&#21069;&#65292;&#27492;&#32467;&#26500;&#20307;&#21517;&#25317;&#26377;<a href="c-language-types.html#.E4.B8.8D.E5.AE.8C.E6.95.B4.E7.B1.BB.E5.9E.8B">&#19981;&#23436;&#25972;&#31867;&#22411;</a>&#12290;</p>
<p>&#36825;&#20801;&#35768;&#32467;&#26500;&#20307;&#24444;&#27492;&#24341;&#29992;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">struct</span> y<span class="sy4">;</span>
<span class="kw1">struct</span> x <span class="br0">{</span> <span class="kw1">struct</span> y <span class="sy2">*</span>p<span class="sy4">;</span> <span class="coMULTI">/* ... */</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> y <span class="br0">{</span> <span class="kw1">struct</span> x <span class="sy2">*</span>q<span class="sy4">;</span> <span class="coMULTI">/* ... */</span> <span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#27880;&#24847;&#65292;&#20134;&#21487;&#21482;&#29992;&#22312;&#21478;&#19968;&#22768;&#26126;&#20013;&#20351;&#29992; struct &#26631;&#31614;&#24341;&#20837;&#26032;&#30340;&#32467;&#26500;&#20307;&#21517;&#65292;&#20294;&#33509;&#20808;&#21069;&#22768;&#26126;&#30340;&#25317;&#26377;&#21516;&#21517;&#30340;&#32467;&#26500;&#20307;&#23384;&#22312;&#20110;&#26631;&#31614;<a href="c-language-name_space.html">&#21629;&#21517;&#31354;&#38388;</a>&#20013;&#65292;&#21017;&#26631;&#31614;&#20250;&#25351;&#20195;&#35813;&#21517;&#31216;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">struct</span> s<span class="sy2">*</span> p <span class="sy1">=</span> <a href="c-types-NULL.html"><span class="kw103">NULL</span></a><span class="sy4">;</span> <span class="co1">// &#26631;&#31614;&#21629;&#21517;&#19968;&#20010;&#20301;&#32622;&#32467;&#26500;&#20307;&#65292;&#22768;&#26126;&#23427;</span>
<span class="kw1">struct</span> s <span class="br0">{</span> <span class="kw4">int</span> a<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// p &#25152;&#25351;&#21521;&#30340;&#32467;&#26500;&#20307;&#30340;&#23450;&#20041;</span>
<span class="kw4">void</span> g<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="sy4">;</span> <span class="co1">// &#26032;&#30340;&#23616;&#37096; struct s &#30340;&#21069;&#32622;&#22768;&#26126;</span>
<span class="co1">// &#23427;&#38544;&#34255;&#20840;&#23616; struct s &#30452;&#33267;&#27492;&#22359;&#32467;&#26463;</span>
<span class="kw1">struct</span> s <span class="sy2">*</span>p<span class="sy4">;</span> <span class="co1">// &#25351;&#21521;&#23616;&#37096; struct s &#30340;&#25351;&#38024;</span>
<span class="co1">// &#33509;&#26080;&#19978;&#38754;&#30340;&#21069;&#32622;&#22768;&#26126;&#65292;&#21017;&#23427;&#20250;&#25351;&#21521;&#25991;&#20214;&#20316;&#29992;&#22495;&#30340; s</span>
<span class="kw1">struct</span> s <span class="br0">{</span> <span class="kw4">char</span><span class="sy2">*</span> p<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#23616;&#37096; struct s &#30340;&#23450;&#20041;</span>
<span class="br0">}</span></pre></div>
</div>
<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-struct.html"><tt>struct</tt></a></p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#28041;&#21450;&#32467;&#26500;&#20307;&#21021;&#22987;&#21270;&#22120;&#30340;&#35268;&#21017;&#65292;&#35265;<a href="c-language-struct_initialization.html">&#32467;&#26500;&#20307;&#21021;&#22987;&#21270;</a>&#12290;</p>
<p>&#22240;&#20026;&#19981;&#20801;&#35768;&#19981;&#23436;&#25972;&#31867;&#22411;&#30340;&#25104;&#21592;&#65292;&#32780;&#19988;&#32467;&#26500;&#20307;&#31867;&#22411;&#22312;&#20854;&#23450;&#20041;&#32467;&#26463;&#21069;&#19981;&#23436;&#25972;&#65292;&#25925;&#32467;&#26500;&#20307;&#19981;&#33021;&#25317;&#26377;&#26377;&#20854;&#33258;&#36523;&#31867;&#22411;&#30340;&#25104;&#21592;&#12290;&#20801;&#35768;&#25351;&#21521;&#20854;&#33258;&#36523;&#31867;&#22411;&#30340;&#25351;&#38024;&#25104;&#21592;&#26159;&#20801;&#35768;&#30340;&#65292;&#32780;&#36825;&#36890;&#24120;&#29992;&#20110;&#23454;&#29616;&#38142;&#34920;&#25110;&#26641;&#30340;&#33410;&#28857;&#12290;</p>
<p>&#22240;&#20026;&#32467;&#26500;&#20307;&#22768;&#26126;&#19981;&#24314;&#31435;<a href="c-language-scope.html">&#20316;&#29992;&#22495;</a>&#65292;&#25925;&#22312; <span class="t-spar">&#32467;&#26500;&#20307;&#22768;&#26126;&#21015;&#34920;</span> &#20013;&#24341;&#20837;&#30340;&#23884;&#22871;&#31867;&#22411;&#12289;&#26522;&#20030;&#21450;&#26522;&#20030;&#39033;&#20250;&#22312;&#23450;&#20041;&#32467;&#26500;&#20307;&#30340;&#22806;&#22260;&#20316;&#29992;&#22495;&#21487;&#35265;&#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;stddef.h&gt;</span>
<span class="co2">#include &lt;stdio.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">struct</span> car <span class="br0">{</span> <span class="kw4">char</span> <span class="sy2">*</span>make<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>model<span class="sy4">;</span> <span class="kw4">int</span> year<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#22768;&#26126;&#32467;&#26500;&#20307;&#31867;&#22411;</span>
<span class="co1">// &#22768;&#26126;&#24182;&#21021;&#22987;&#21270;&#20043;&#21069;&#22768;&#26126;&#30340;&#32467;&#26500;&#20307;&#31867;&#22411;&#30340;&#23545;&#35937;</span>
<span class="kw1">struct</span> car c <span class="sy1">=</span> <span class="br0">{</span>.<span class="me1">year</span><span class="sy1">=</span><span class="nu0">1923</span>, .<span class="me1">make</span><span class="sy1">=</span><span class="st0">&quot;Nash&quot;</span>, .<span class="me1">model</span><span class="sy1">=</span><span class="st0">&quot;48 Sports Touring Car&quot;</span><span class="br0">}</span><span class="sy4">;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;car: %d %s %s<span class="es1">\n</span>&quot;</span>, c.<span class="me1">year</span>, c.<span class="me1">make</span>, c.<span class="me1">model</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#22768;&#26126;&#32467;&#26500;&#20307;&#31867;&#22411;&#12289;&#35813;&#31867;&#22411;&#30340;&#23545;&#35937;&#21644;&#25351;&#21521;&#23427;&#30340;&#25351;&#38024;</span>
<span class="kw1">struct</span> spaceship <span class="br0">{</span> <span class="kw4">char</span> <span class="sy2">*</span>make<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>model<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>year<span class="sy4">;</span> <span class="br0">}</span>
ship <span class="sy1">=</span> <span class="br0">{</span><span class="st0">&quot;Incom Corporation&quot;</span>, <span class="st0">&quot;T-65 X-wing starfighter&quot;</span>, <span class="st0">&quot;128 ABY&quot;</span><span class="br0">}</span>,
<span class="sy2">*</span>pship <span class="sy1">=</span> <span class="sy3">&amp;</span>ship<span class="sy4">;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;spaceship: %s %s %s<span class="es1">\n</span>&quot;</span>, ship.<span class="me1">year</span>, ship.<span class="me1">make</span>, ship.<span class="me1">model</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#22320;&#22336;&#20197;&#22768;&#26126;&#39034;&#24207;&#36882;&#22686;</span>
<span class="co1">// &#21487;&#33021;&#25554;&#20837;&#22635;&#20805;&#23383;&#33410;</span>
<span class="kw1">struct</span> A <span class="br0">{</span> <span class="kw4">char</span> a<span class="sy4">;</span> <span class="kw4">double</span> b<span class="sy4">;</span> <span class="kw4">char</span> c<span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;offset of char a = %zu<span class="es1">\n</span>offset of double b = %zu<span class="es1">\n</span>offset of char c = %zu<span class="es1">\n</span>&quot;</span>
<span class="st0">&quot;sizeof(struct A) = %zu<span class="es1">\n</span>&quot;</span>, <a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, a<span class="br0">)</span>, <a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, b<span class="br0">)</span>,
<a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, c<span class="br0">)</span>, <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> A<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">struct</span> B <span class="br0">{</span> <span class="kw4">char</span> a<span class="sy4">;</span> <span class="kw4">char</span> b<span class="sy4">;</span> <span class="kw4">double</span> c<span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;offset of char a = %zu<span class="es1">\n</span>offset of char b = %zu<span class="es1">\n</span>offset of double c = %zu<span class="es1">\n</span>&quot;</span>
<span class="st0">&quot;sizeof(struct B) = %zu<span class="es1">\n</span>&quot;</span>, <a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, a<span class="br0">)</span>, <a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, b<span class="br0">)</span>,
<a href="c-types-offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, c<span class="br0">)</span>, <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> B<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#33021;&#36716;&#22411;&#25351;&#21521;&#32467;&#26500;&#20307;&#30340;&#25351;&#38024;&#20026;&#25351;&#21521;&#20854;&#39318;&#25104;&#21592;&#30340;&#25351;&#38024;&#65292;&#21453;&#20043;&#20134;&#28982;</span>
<span class="kw4">char</span><span class="sy2">*</span> pmake <span class="sy1">=</span> <span class="br0">(</span><span class="kw4">char</span><span class="sy2">*</span><span class="br0">)</span>pship<span class="sy4">;</span>
pship <span class="sy1">=</span> <span class="br0">(</span><span class="kw1">struct</span> spaceship <span class="sy2">*</span><span class="br0">)</span>pmake<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">car: 1923 Nash 48 Sports Touring Car
spaceship: 128 ABY Incom Corporation T-65 X-wing starfighter
offset of char a = 0
offset of double b = 8
offset of char c = 16
sizeof(struct A) = 24
offset of char a = 0
offset of char b = 1
offset of double c = 8
sizeof(struct B) = 16</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>
<ul>
<li><a href="c-language-operator_member_access.html">&#32467;&#26500;&#20307;&#21450;&#32852;&#21512;&#20307;&#25104;&#21592;&#35775;&#38382;</a></li>
<li><a href="c-language-bit_field.html">&#20301;&#22495;</a></li>
<li><a href="c-language-struct_initialization.html">&#32467;&#26500;&#20307;&#21021;&#22987;&#21270;</a></li>
</ul>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>