📄 unit 3-54%.htm
字号:
l18 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="javascript:ContentByName('pg-dynamic-allocation');">3.1.2 Dynamic
Allocation</a> <o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:36.1pt;text-indent:-18.0pt;mso-pagination:widow-orphan;mso-list:
l18 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="javascript:ContentByName('pg-allocation-types');">3.1.3 Explicit vs.
Implicit</a> <o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:36.1pt;text-indent:-18.0pt;mso-pagination:widow-orphan;mso-list:
l18 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="javascript:ContentByName('pg-program-memory');">3.1.4 Program Memory
Layout</a> <o:p></o:p></span></p>
<p class=MsoNormal style='margin-top:12.0pt;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:10.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>© Copyright
1999-2005 iCarnegie, Inc. All rights reserved.<o:p></o:p></span></p>
<span style='font-size:18.0pt;font-family:SimSun;mso-bidi-font-family:SimSun;
mso-ansi-language:EN-GB;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'><br
clear=all style='page-break-before:always'>
</span>
<h2 style='text-align:justify;text-justify:inter-ideograph'><span lang=EN-US
style='font-family:"Times New Roman";color:black;mso-ansi-language:EN-US'>3.1.1
Static Allocation<o:p></o:p></span></h2>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:36.1pt;text-indent:-18.0pt;mso-pagination:widow-orphan;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="http://www.icarnegie.com/content/SSD/SSD6/2.0/normal/pg-memory-layout/pg-memory-use/pg-static-allocation/pg-static-allocation.html#sa#sa">Static
Allocation</a> <o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:36.1pt;text-indent:-18.0pt;mso-pagination:widow-orphan;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="http://www.icarnegie.com/content/SSD/SSD6/2.0/normal/pg-memory-layout/pg-memory-use/pg-static-allocation/pg-static-allocation.html#sacd#sacd">Static
Allocation vs. C++ static Declarations</a> <o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:36.1pt;text-indent:-18.0pt;mso-pagination:widow-orphan;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span lang=EN-US
style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black;
mso-font-kerning:0pt;mso-ansi-language:EN-US'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'><a
href="http://www.icarnegie.com/content/SSD/SSD6/2.0/normal/pg-memory-layout/pg-memory-use/pg-static-allocation/pg-static-allocation.html#pfsa#pfsa">Precautions
for Static Allocation</a> <o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan;mso-outline-level:3'><b><span lang=EN-US
style='font-size:13.5pt;color:black;mso-font-kerning:0pt;mso-ansi-language:
EN-US'>Static Allocation<o:p></o:p></span></b></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>The simplest form of
memory allocation is <i>static allocation</i>. The word <i>static</i> refers to
things that happen at compile time and link time when the program is
constructed-as opposed to load time or run time when the program is actually
started.</span><span style='font-size:12.0pt;color:black;mso-font-kerning:0pt'><o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>In C++, when you
declare a variable outside of any function or class definition, the compiler
allocates space for it in memory. The variable will exist at a fixed address
throughout the execution of the program. For example:<o:p></o:p></span></p>
<div align=center>
<table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:1.5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
<td style='padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_var[128]; // a statically allocated variable<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_fn(int x)<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>{<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>for (int i = 0; i < 128; i++)<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span
style='mso-spacerun:yes'>
</span>my_var[i] = 0;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>}<o:p></o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td style='padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal style='mso-pagination:widow-orphan'><b><span lang=EN-US
style='font-size:12.0pt;color:black;mso-font-kerning:0pt;mso-ansi-language:
EN-US'>Example 1</span></b><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'> Static allocation
of my_var <o:p></o:p></span></p>
</td>
</tr>
</table>
</div>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>In practice, the
compiler does not actually know the exact address for the variable. Instead, it
uses a symbolic name for the variable, and in a later step, the linker will
alter the generated code so that all memory addresses are correct. We will
learn more about linking later.<o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan;mso-outline-level:3'><b><span lang=EN-US
style='font-size:13.5pt;color:black;mso-font-kerning:0pt;mso-ansi-language:
EN-US'>Static Allocation vs. C++ static Declarations<o:p></o:p></span></b></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>C and C++ use the
keyword <b>static</b> to mean something related to, but not the same as static
allocation. A C or C++ variable declared as static is allocated statically and,
<i>in addition,</i> the variable is visible only to functions defined within
the same file. For example, consider the following:<o:p></o:p></span></p>
<div align=center>
<table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:1.5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
<td style='padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_var[128]; // a statically allocated variable<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>static bool my_var_initialized = false;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_fn(int x)<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>{<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>if (my_var_initialized) return;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>my_var_initialized = true;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>for (int i = 0; i < 128; i++)<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span
style='mso-spacerun:yes'>
</span>my_var[i] = 0;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>}<o:p></o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td style='padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal style='mso-pagination:widow-orphan'><b><span lang=EN-US
style='font-size:12.0pt;color:black;mso-font-kerning:0pt;mso-ansi-language:
EN-US'>Example 2</span></b><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'> Static allocation
vs. static variables<o:p></o:p></span></p>
</td>
</tr>
</table>
</div>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>The variable <b>my_var</b>
is initialized by <b>my_fn</b>. The programmer wants to make sure <b>my_var</b>
is only initialized once, so the flag <b>my_var_initialized</b> is used to
remember when initialization has occurred. A test in <b>my_fn</b> returns immediately
if <b>my_var</b> has been initialized.<o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>The way this code
fragment is written <b>my_var</b> and <b>my_fn</b> will be visible globally:
any function can initialize <b>my_var</b> by calling <b>my_fn</b>, and any
function can declare and access <b>my_var</b>. However, functions declared in other
files cannot access <b>my_var_initialized</b> because it is declared with <b>static</b>.
It would have been much clearer if C and C++ designers would have introduced
another keyword (such as <b>local</b>) instead of using <b>static</b> in this
way.<o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:12.0pt;
color:black;mso-font-kerning:0pt;mso-ansi-language:EN-US'>The keyword <b>static</b>
can also be used within a function. Normally, a variable declared within a
function is created when the function is called and only exists for the
duration of the function call. In contrast, if a variable within a function is
declared with <b>static</b>, the variable is statically allocated. It is only
visible within the function, but the variable is not recreated each time the
function is called. This is useful if you want to have a value persist from
function call to function call, but you want to hide the variable from other
functions. The previous example could have been written so that <b>my_var_initialized</b>
is only visible to <b>my_fn</b>:<o:p></o:p></span></p>
<div align=center>
<table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:1.5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
<td style='padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_var[128]; // a statically allocated variable<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>int my_fn(int x)<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'>{<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>// note that the initialization of my_var_initialized<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>// takes place only once, not every time my_fn() is called:<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>static bool my_var_initialized = false;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style='font-size:12.0pt;color:black;mso-font-kerning:0pt;
mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>
</span>if (my_var_initialized) return;<o:p></o:p></span></p>
<p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
lang=EN-US style
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -