<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=437 </link><title>C语言变量的存储类别专题讲座-学C者必看</title><author>幻影</author><pubDate>2009-12-15 11:40:52</pubDate><description><![CDATA[<div style="line-height: 20pt"><span style="font-size: 12pt">1</span><span style="font-size: 12pt">、局部变量和全局变量</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">从变量的作用域</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">即从空间</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">角度可以将变量分为局部变量和全局变量。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">(1) </span><span style="font-size: 12pt">局部变量</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">在一个函数内部定义的变量是内部变量，它只在本函数范围内有效，也就是说只有在本函数内才能使用它们，在此函数外是不能使用这些变量的，这就称为&ldquo;局部变量&rdquo;。</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) </span><span style="font-size: 12pt">全局变量</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">程序的编译单位是源程序文件，一个源程序文件可以包含一个或多个函数。在函数内定义的变量是局部变量，而在函数之外定义的变量称为全局变量，全局变量可以在本文件中为其它函数所共用，它的有效范围为从定义变量的位置开始到本源文件结束。</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">为了便于区分全局变量和局部变量，一般将全局变量名的第一个字母用大写表示。</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) </span><span style="font-size: 12pt">不建议使用全局变量的原因</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">全局变量在程序的全部执行中都占用存储单元，而不是仅在需要时才开辟单元；</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">它使函数的通用性降低了，因为函数在执行时要依赖于其所在的外部变量；</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">使用全局变量过多，会降低程序的清晰性，人们往往难以清楚地判断出每个瞬时各个外部变量的值。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">如果在同一个源文件中，外部变量与局部变量同名，则在局部变量的作用范围内，外部变量会被&ldquo;屏蔽&rdquo;，即它不起作用。</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">2</span><span style="font-size: 12pt">、变量的存储类别</span></div>
<div style="line-height: 20pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) </span><span style="font-size: 12pt">动态存储方式和静态存储方式</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">从变量值存在的时间</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">即生命期</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">角度可以将变量分为静态存储变量和动态存储变量，简称静态变量和动态变量。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">所谓静态存储方式是指在程序运行期间分配固定的存储空间的方式，而动态存储方式则是指在程序运行期间根据需要进行动态分配存储空间的方式。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">供用户使用的存储空间可以分为程序区、静态存储区和动态存储区，数据分别存放在静态存储区和动态存储区。全局变量全部存放在静态存储区，在程序开始执行时给全局变量分配存储区，程序执行完毕就释放。在程序执行过程中它们占据固定的存储单元，而不是动态地进行分配和释放。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">在动态存储区中存放以下数据：函数形参、自动变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">未加</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明的局部变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">以及函数调用时的现场保护和返回地址等。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">(3) </span><span style="font-size: 12pt">变量和函数的属性</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">在</span><span style="font-size: 12pt">C</span><span style="font-size: 12pt">语言中每一个变量和函数都有两个属性：数据类型和数据的存储类别。数据类型就是大家熟知的整型、字符型、实型等；存储类别指的是数据在内存中存储的方式。存储方式分为两大类：静态存储类和动态存储类，具体包括四种：自动的</span><span style="font-size: 12pt">(auto)</span><span style="font-size: 12pt">、静态的</span><span style="font-size: 12pt">(static)</span><span style="font-size: 12pt">、寄存器的</span><span style="font-size: 12pt">(register)</span><span style="font-size: 12pt">，外部的</span><span style="font-size: 12pt">(extern)</span><span style="font-size: 12pt">。根据变量的存储类别，可以知道变量的作用域和生存期。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">(4) auto</span><span style="font-size: 12pt">变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">函数中的局部变量，如不专门声明为</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">存储类别，都是动态分配存储空间的，数据存储在动态存储区中。函数中的形参和在函数中定义的变量都属此类，在调用这些函数时系统会给它们分配存储空间，在函数调用结束时就自动释放这些存储空间，因此这类局部变量称为自动变量。自动变量用关键字</span><span style="font-size: 12pt">auto</span><span style="font-size: 12pt">作存储类别的声明。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">实际上，关键字&ldquo;</span><span style="font-size: 12pt">auto</span><span style="font-size: 12pt">&rdquo;可以省略，</span><span style="font-size: 12pt">auto</span><span style="font-size: 12pt">不写则隐含确定为&ldquo;自动存储类别&rdquo;，它属于动态存储方式。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">(5) </span><span style="font-size: 12pt">用</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明局部变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值，即其占用的存储单元不释放，在下一次该函数调用时，该变量已有值，就是上一次函数调用结束时的值，这时就应该指定局部变量为&ldquo;静态局部变量&rdquo;，用关键字</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">进行声明。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">对静态局部变量的说明：</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">静态局部变量属于静态存储类型，在静态存储区为其分配存储单元。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">静态局部变量是在编译时赋初值的，即只赋初值一次，在程序运行时它已有初值。以后在每次调用函数时不再重新赋初值而是保留上次函数调用结束时的值。而对自动变量赋初值不是在编译时进行的，而是在函数调用时进行的，每调用一次函数就重新给其赋一次初值，相当于执行一次赋值语句。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">如在定义局部变量时不赋初值的话，则对于静态局部变量来说，编译时自动赋初值</span><span style="font-size: 12pt">0(</span><span style="font-size: 12pt">对数值型变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">或空字符</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">对字符变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">，而对自动变量来说，如果不赋初值则它的值是一个不确定的值。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">虽然静态局部变量是在函数调用结束后仍然存在，但其它函数是不能引用它的。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">什么时候需要使用局部静态变量呢？</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">需要保留函数上一次调用结束时的值。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">如果初始化后，变量只被引用而不改变其值，则这时用静态局部变量比较方便，以免每次调用时重新赋值。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">(6) register</span><span style="font-size: 12pt">变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">一般情况下，变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">包括静态存储方式和动态存储方式</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">的值是存放在内存中的，当程序中用到哪一个变量的值时，由控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算，如果需要存数，再从运算器将数据送到内存中。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">如果有一些变量使用频繁</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">例如在一个函数中执行</span><span style="font-size: 12pt">10000</span><span style="font-size: 12pt">次循环，每次循环都要引用某局部变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">，则为存取变量的值要花不少时间。为提高执行效率，</span><span style="font-size: 12pt">C</span><span style="font-size: 12pt">语言允许将局部变量的值放在</span><span style="font-size: 12pt">CPU</span><span style="font-size: 12pt">中的寄存器中，需要用时直接从寄存器中取出参加运算，不必再到内存中去读取。由于对寄存器的存取速度远高于对内存的存取速度，因此这样做可以提高执行效率。这种变量叫做&ldquo;寄存器变量&rdquo;，用关键字</span><span style="font-size: 12pt">register</span><span style="font-size: 12pt">做声明。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">关于寄存器变量的说明：</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">只有局部自动变量和形参可以作为寄存器变量，其它</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">如全局变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">不行。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">一个计算机系统中的寄存器数目是有限的，不能定义任意多个寄存器变量。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">局部静态变量不能定义为寄存器变量。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">(7) </span><span style="font-size: 12pt">用</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">声明外部变量</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">外部变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">即全局变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">是在函数的外部定义的，它的作用域为从变量的定义处开始，到本程序文件的末尾。在此作用域内，全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。有时需要用</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">来声明外部变量以扩展外部变量的作用域。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">在一个文件内声明外部变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">如果外部变量不在文件的开头定义，其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量，则应该在引用前用关键字</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">对该变量做&ldquo;外部变量声明&rdquo;，表示该变量是一个已经定义的外部变量。有了该声明，就可以从声明处起，合法地使用该外部变量。换句话说，就是先使用该全局变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">使用前要用</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">声明</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">，然后才定义该全局变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">如在文件末尾处而不是文件开始处定义</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 42pt"><span style="font-size: 12pt">用</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">声明外部变量时，类型名可以写也可以不写。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">在多文件的程序中声明外部变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">一个</span><span style="font-size: 12pt">C</span><span style="font-size: 12pt">程序可以由一个或多个源程序文件组成。如果程序由多个源程序文件组成，那么在一个文件中想引用另一个文件中已定义的外部变量应该怎么办呢？</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">方法就是一个文件</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">任一个都可以</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">中定义该外部变量，当另一文件要引用该外部变量时，只需在该文件中用</span><span style="font-size: 12pt">extern</span><span style="font-size: 12pt">对该外部变量进行声明即可。</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">需要注意的是，需要慎用这样的全局变量，因为在执行一个文件中函数时可能会改变该全局变量的值，它会影响到其它文件中函数的执行结果。</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">(8) </span><span style="font-size: 12pt">用</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明外部变量</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">有时在程序设计中希望某些外部变量只限于被本文件引用，而不能被其他文件引用，这时可以在定义外部变量时加一个</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明。这种加上</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明、只能用于本文件的外部变量</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">全局变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">称为静态外部变量。</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">需要指出的是，对外部变量加</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明并不意味着这时才是静态存储，而不加</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">的是动态存储，两种形式的外部变量都是静态存储方式，只是作用范围不同而已，都是在编译时分配内存的。</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">(9) </span><span style="font-size: 12pt">关于变量的声明和定义</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">广义地说，声明包括定义，但并非所有的生命都是定义。在声明部分出现的变量有两种情况：一种是需要建立存储空间的</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">如：</span><span style="font-size: 12pt">int a;)</span><span style="font-size: 12pt">；另一种是不需要建立存储空间的</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">如：</span><span style="font-size: 12pt">extern a;)</span><span style="font-size: 12pt">。前者称为&ldquo;定义性声明&rdquo;，或称定义；后者称为&ldquo;引用性声明&rdquo;。对&ldquo;</span><span style="font-size: 12pt">int a;</span><span style="font-size: 12pt">&rdquo;而言，它既是声明，又是定义；而对&ldquo;</span><span style="font-size: 12pt">extern a;</span><span style="font-size: 12pt">&rdquo;而言，它是声明而不是定义。一般为了叙述方便，把建立存储空间的声明称为定义，而把不需要建立存储空间的声明称为声明。显然这里的声明是狭义的，即非定义性声明。</span></div>
<div style="line-height: 20pt; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">外部变量的定义和声明其含义是不同的，外部变量的定义只能有一次，它的位置在所有函数之外，而同一个文件中的外部变量的声明可以有多次，它的位置可以在函数之内</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">哪个函数要用就在哪个函数中声明</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">也可以在函数之外</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">在外部变量的定义点之前</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">。对外部变量的初始化只能在&ldquo;定义&rdquo;时进行，而不能在&ldquo;声明&rdquo;中进行。所谓&ldquo;声明&rdquo;，其作用就是声明该变量是一个已在后面定义过的外部变量，仅仅是为了&ldquo;提前&rdquo;引用该变量而做的&ldquo;声明&rdquo;。</span></div>
<div style="line-height: 20pt; text-indent: 21pt"><span style="font-size: 12pt">(10) </span><span style="font-size: 12pt">总结</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">对一个数据的定义，需要指出两种属性：数据类型和存储类别，分别使用两个关键字。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">从作用域角度分，有局部变量和全局变量，它们采用的存储类别如下：</span><span style="font-size: 12pt">1) </span><span style="font-size: 12pt">局部变量：自动变量、静态局部变量、寄存器变量、形参；</span><span style="font-size: 12pt">2) </span><span style="font-size: 12pt">全局变量：静态外部变量、外部变量。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">从变量存在的时间来区分，有动态存储方式和静态存储方式两种类型。静态存储是程序整个运行时间都存在，而动态存储则是在调用函数时临时分配单元。</span><span style="font-size: 12pt">1) </span><span style="font-size: 12pt">动态存储：自动变量、寄存器变量、形参；</span><span style="font-size: 12pt">2) </span><span style="font-size: 12pt">静态存储：静态局部变量、静态外部变量、外部变量。</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">从变量值存放的位置来区分，可分为：</span><span style="font-size: 12pt">1) </span><span style="font-size: 12pt">内存中静态存储区：静态局部变量、静态外部变量、外部变量；</span><span style="font-size: 12pt">2) </span><span style="font-size: 12pt">内存中动态存储区：自动变量、形参；</span><span style="font-size: 12pt">3) CPU</span><span style="font-size: 12pt">中的寄存器：寄存器变量</span></div>
<div style="line-height: 20pt; margin: 0cm 0cm 0pt 21pt"><span style="font-size: 12pt">?<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">对局部变量和全局变量的作用不同，对局部变量来说，它使变量由动态存储方式改变为静态存储方式，而对全局变量来说，它使变量局部化</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">局限于本文件</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">，但仍为静态存储方式。从作用域角度看，凡是</span><span style="font-size: 12pt">static</span><span style="font-size: 12pt">声明的，其作用域都是局限的，或者是局限于本函数内</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">静态局部变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">，或者局限于本文件内</span><span style="font-size: 12pt">(</span><span style="font-size: 12pt">静态外部变量</span><span style="font-size: 12pt">)</span><span style="font-size: 12pt">。</span></div>]]></description></item></channel></rss>