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

95 lines
9.3 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>&#29983;&#23384;&#26399;</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_lifetime skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#29983;&#23384;&#26399;</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>C &#20013;&#27599;&#20010;<a href="c-language-object.html">&#23545;&#35937;</a>&#23384;&#22312;&#12289;&#25317;&#26377;&#24120;&#22320;&#22336;&#12289;&#20445;&#26377;&#20854;&#26368;&#36817;&#19968;&#27425;&#23384;&#20648;&#20540;&#65288;&#38500;&#38750;&#20854;&#20540;&#19981;&#30830;&#23450;&#65289;<span class="t-rev-inl t-since-c99"><span>&#65292;&#23545;&#20110; VLA &#36824;&#26377;&#20445;&#26377;&#20854;&#22823;&#23567;</span> <span><span class="t-mark-rev t-since-c99">(C99 &#36215;)</span></span></span>&#30340;&#31243;&#24207;&#25191;&#34892;&#37096;&#20998;&#65292;&#34987;&#31216;&#20316;&#35813;&#23545;&#35937;&#30340;<i>&#29983;&#23384;&#26399;</i>&#12290;</p>
<p>&#23545;&#20110;&#22768;&#26126;&#26377;&#33258;&#21160;&#12289;&#38745;&#24577;&#21450;&#32447;&#31243;&#23384;&#20648;&#26399;&#30340;&#23545;&#35937;&#65292;&#29983;&#23384;&#26399;&#31561;&#20110;&#20854;<a href="c-language-storage_duration.html">&#23384;&#20648;&#26399;</a>&#65288;&#27880;&#24847;&#38750; VLA &#21644; VLA &#33258;&#21160;&#23384;&#20648;&#26399;&#30340;&#21306;&#21035;&#65289;&#12290;</p>
<p>&#23545;&#20110;&#25317;&#26377;&#20998;&#37197;&#23384;&#20648;&#26399;&#30340;&#23545;&#35937;&#65292;&#20854;&#29983;&#23384;&#26399;&#22987;&#20110;&#20998;&#37197;&#20989;&#25968;&#30340;&#36820;&#22238;&#65288;&#21253;&#21547;&#20174; <span class="t-lc"><a href="c-memory-realloc.html">realloc</a></span> &#36820;&#22238;&#65289;&#65292;&#32456;&#20110; <span class="t-lc"><a href="c-memory-realloc.html">realloc</a></span> &#25110;&#35299;&#20998;&#37197;&#20989;&#25968;&#30340;&#35843;&#29992;&#12290;&#27880;&#24847;&#22240;&#20026;&#20998;&#37197;&#30340;&#23545;&#35937;&#27809;&#26377;<a href="c-language-object.html">&#22768;&#26126;&#31867;&#22411;</a>&#65292;&#39318;&#27425;&#35775;&#38382;&#35813;&#23545;&#35937;&#25152;&#29992;&#30340;&#24038;&#20540;&#34920;&#36798;&#24335;&#31867;&#22411;&#20250;&#25104;&#20026;&#20854;<a href="c-language-object.html#.E6.9C.89.E6.95.88.E7.B1.BB.E5.9E.8B">&#26377;&#25928;&#31867;&#22411;</a>&#12290;</p>
<p>&#22312;&#29983;&#23384;&#26399;&#22806;&#35775;&#38382;&#23545;&#35937;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;&#12290;</p>
<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> foo<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> a <span class="sy1">=</span> <span class="nu0">17</span><span class="sy4">;</span> <span class="co1">// a&#25317;&#26377;&#33258;&#21160;&#23384;&#20648;&#26399;</span>
<span class="kw1">return</span> <span class="sy3">&amp;</span>a<span class="sy4">;</span>
<span class="br0">}</span> <span class="co1">// a&#30340;&#29983;&#23384;&#26399;&#32467;&#26463;</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><span class="sy2">*</span> p <span class="sy1">=</span> foo<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p &#25351;&#21521;&#29983;&#23384;&#26399;&#32467;&#26463;&#21518;&#30340;&#23545;&#35937;&#65288;&ldquo;&#24748;&#22402;&#25351;&#38024;&rdquo;&#65289;</span>
<span class="kw4">int</span> n <span class="sy1">=</span> <span class="sy2">*</span>p<span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#25351;&#21521;&#29983;&#23384;&#26399;&#32467;&#26463;&#30340;&#23545;&#35937;&#65288;&#25110;&#35813;&#23545;&#35937;&#21518;&#19968;&#20301;&#32622;&#65289;&#30340;&#25351;&#38024;&#25317;&#26377;&#19981;&#30830;&#23450;&#20540;&#12290;</p>
<h3><span class="mw-headline" id=".E4.B8.B4.E6.97.B6.E7.94.9F.E5.AD.98.E6.9C.9F">&#20020;&#26102;&#29983;&#23384;&#26399;</span></h3>
<p><a href="c-language-value_category.html">&#38750;&#24038;&#20540;&#34920;&#36798;&#24335;</a>&#25152;&#25351;&#20195;&#30340;&#25317;&#26377;&#25968;&#32452;&#25104;&#21592;&#30340;&#32467;&#26500;&#20307;&#21644;&#32852;&#21512;&#20307;&#23545;&#35937;&#65288;&#30452;&#25509;&#20026;&#20854;&#25104;&#21592;&#25110;&#20026;&#23884;&#22871;&#30340;&#32467;&#26500;&#20307;/&#32852;&#21512;&#20307;&#25104;&#21592;&#65289;&#25317;&#26377;<i>&#20020;&#26102;&#29983;&#23384;&#26399;</i>&#12290;&#20020;&#26102;&#29983;&#23384;&#26399;&#22987;&#20110;&#27714;&#20540;&#25351;&#20195;&#35813;&#23545;&#35937;&#30340;&#34920;&#36798;&#24335;&#65292;&#32456;&#20110;<span class="t-rev-inl t-until-c11"><span>&#19979;&#19968;&#20010;<a href="c-language-eval_order.html">&#24207;&#21015;&#28857;</a></span> <span><span class="t-mark-rev t-until-c11">(C11 &#21069;)</span></span></span><span class="t-rev-inl t-since-c11"><span>&#21253;&#21547;&#23427;&#30340;&#23436;&#25972;&#34920;&#36798;&#24335;&#25110;&#23436;&#25972;&#22768;&#26126;&#22120;&#32467;&#26463;</span> <span><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></span></span>&#12290;</p>
<p>&#20219;&#20309;&#20462;&#25913;&#20020;&#26102;&#29983;&#23384;&#26399;&#23545;&#35937;&#30340;&#23581;&#35797;&#20250;&#23548;&#33268;&#26410;&#23450;&#20041;&#34892;&#20026;&#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> T <span class="br0">{</span> <span class="kw4">double</span> a<span class="br0">[</span><span class="nu0">4</span><span class="br0">]</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> T f<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="br0">(</span><span class="kw1">struct</span> T<span class="br0">)</span><span class="br0">{</span><span class="nu16">3.15</span><span class="br0">}</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">double</span> g1<span class="br0">(</span><span class="kw4">double</span><span class="sy2">*</span> x<span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="sy2">*</span>x<span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">void</span> g2<span class="br0">(</span><span class="kw4">double</span><span class="sy2">*</span> x<span class="br0">)</span> <span class="br0">{</span> <span class="sy2">*</span>x <span class="sy1">=</span> <span class="nu16">1.0</span><span class="sy4">;</span> <span class="br0">}</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">double</span> d <span class="sy1">=</span> g1<span class="br0">(</span>f<span class="br0">(</span><span class="br0">)</span>.<span class="me1">a</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// C99 &#65306; UB &#35775;&#38382;&#29983;&#23384;&#26399;&#32467;&#26463;&#20110; g1 &#24320;&#24207;&#21015;&#28857;&#30340; a[0]</span>
<span class="co1">// C11 &#65306; OK &#65292; d &#20026; 3.15</span>
g2<span class="br0">(</span>f<span class="br0">(</span><span class="br0">)</span>.<span class="me1">a</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// C99 &#65306; UB &#20462;&#25913;&#29983;&#23384;&#26399;&#32467;&#26463;&#20110;&#24207;&#21015;&#28857;&#30340; a[0]</span>
<span class="co1">// C11 &#65306; UB &#35797;&#22270;&#20462;&#25913;&#20020;&#26102;&#23545;&#35937;</span>
<span class="br0">}</span></pre></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.2.4 Storage durations of objects (p: 38-39)</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.2.4 Storage durations of objects (p: 32)</li>
</ul>
</dd>
</dl>
<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.1.2.4 Storage durations of objects</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>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>