⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c45.htm

📁 经典c语言教程
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>变量的存储类型 </title>
<script language="javascript">
    var prePage="http://www.nec.sjtu.edu.cn/support/Course/C/c/c4/c/c4/c44.htm";
    var nextPage="c/c4/c46.htm";
</script>

<link rel="stylesheet" href="../cstyle.css" type="text/css">
<bgsound src="../voice/c45.au" loop="1">
</head>

<body background="../img/mainback.jpg" bgproperties="fixed">

<h2 align="center"><font face="楷体_GB2312"><a name="_top"></a>4.5 变量的存储类型</font></h2>
<div align="center"><center>

<table border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
    <td width="20%" align="center"><font FACE="宋体" SIZE="3"><p ALIGN="center"><a
    href="c45.htm#c451.html#c451">引言</a></font></td>
    <td width="20%" align="center"><a href="c45.htm#c452.html#c452"><font FACE="宋体" SIZE="3">自动变量</font></a></td>
    <td width="20%" align="center"><a href="c45.htm#c453.html#c453"><font FACE="宋体" SIZE="3">外部变量</font></a></td>
    <td width="20%" align="center"><a href="c45.htm#c454.html#c454"><font FACE="宋体" SIZE="3">静态变量</font></a></td>
    <td width="20%" align="center"><a href="c45.htm#c455.html#c455"><font FACE="宋体" SIZE="3">寄存器变量</font></a></td>
  </tr>
</table>
</center></div>

<hr>

<h3><a name="c451"></a>1.<font FACE="宋体" SIZE="3">引言</font></h3>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY"><img src="../img/c451.gif"
  alt="c451.jpg (4059 bytes)" align="right" WIDTH="293" HEIGHT="86">我们知道, 
  每一个变量都有一个类型。另外, 
  每一个变量都有一个存储类。变量的存储类是由它被定义的地方决定的, 
  并且, 如果用了关键字, 
  则还要由关键字决定。有四个关键字描述存储类<font SIZE="3">: extern, 
  auto, static </font>和<font SIZE="3"> register</font>。</p>
  <p ALIGN="JUSTIFY">存储类决定了两件事, 第一, 
  它控制哪些函数可以访问一个变量,第二, 
  存储类决定了变量在内存中的时间。</p>
  </font><p ALIGN="right"><a href="c45.htm#_top.html#_top">返回页首</a></p>
</blockquote>

<hr>
<font FACE="宋体" SIZE="3">

<h3 ALIGN="JUSTIFY"><a name="c452"></a>2.自动变量</h3>
</font>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">在一个函数中说明的变量, 
  其类型缺省为自动类的。然而, 你可以用关键字 auto 来清楚地表示:<br>
  main()<br>
  {<br>
  &nbsp;&nbsp;&nbsp; auto int plox;<br>
  &nbsp;&nbsp;&nbsp; ....</p>
  <p ALIGN="JUSTIFY">一个自动类变量是局部范围的。仅仅定义此变量的函数知道此变量。其它函数可以有同一名字的变量, 
  但它们是独立的变量, 并且可能存储在不同的内存位置。</p>
  <p ALIGN="JUSTIFY">现在, 我们看一个例子:<br>
  </p>
<!-- Aftershock c452.swf 3=550 4=370 40 -->
  <p>
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=3,0,0,0" ID="c452"
  WIDTH="550" HEIGHT="370">
    <param name="movie" value="../movie/c452.swf">
    <param name="quality" value="autohigh">
    <param name="bgcolor" value="#FFFFCC"><embed SRC="../movie/c452.swf" swLiveConnect="FALSE" WIDTH="550" HEIGHT="370"
QUALITY="autohigh" BGCOLOR="#FFFFCC" TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
  </object>
  </p>
<!-- EndAftershock c452.swf -->
  <p ALIGN="right"></font><a href="c45.htm#_top.html#_top">返回页首</a><font FACE="宋体"
  SIZE="3"></p>
  </font>
</blockquote>

<hr>
<font FACE="宋体" SIZE="3">

<h3 ALIGN="JUSTIFY"><a name="c453"></a>3.外部变量</h3>
</font>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">在一个函数外部定义的变量是外部的。一个外部变量也必须在用到它的函数中说明后才能使用; 
  这可以用extern显式地说明, 
  也可由上下文隐含地说明。一个外部变量在程序运行时都存在, 
  而不是限制在某个函数中。</p>
  <p ALIGN="JUSTIFY">说明如下: </p>
  <p ALIGN="JUSTIFY">/* 三个外部定义的变量 */<br>
  int errupt ;<br>
  char coal;<br>
  double up;<br>
  main()<br>
  {<br>
  /* 说明那三个外部定义的变量 */<br>
  &nbsp;&nbsp;&nbsp; extern int errupt;<br>
  &nbsp;&nbsp;&nbsp; extern char coal;<br>
  &nbsp;&nbsp;&nbsp; extern double up;<br>
  &nbsp;&nbsp;&nbsp; ....</p>
  <p ALIGN="JUSTIFY">有两种情形, 
  你必须在使用一个外部变量之前先用关键字 extern 说明它 。</p>
  <p ALIGN="JUSTIFY">情形 1: 如果你在一个文件中, 
  要在一个外部变量的定义之前使用它, 那么你必须在用之前先用 extern 
  来说明它。看一个例子: <br>
  &nbsp;&nbsp; </font><font face="宋体">try()<br>
  &nbsp;&nbsp;&nbsp; {<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008080"><strong>extern int i;</strong> 
  </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#FF0000">&lt;--- i必须先用</font><br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i=i+5;<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>
  &nbsp;&nbsp;&nbsp; }<br>
  &nbsp;&nbsp;&nbsp; ...<br>
  &nbsp;&nbsp;&nbsp; <font color="#008080"><strong>int i;</strong></font> 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  <font color="#FF0000">&lt;---i在后面定义&nbsp; </font></font><font FACE="宋体"
  SIZE="3"></p>
  <font SIZE="2"><p></font></font><font face="宋体">情形 2: </font><font FACE="宋体"
  SIZE="3">如果不在一个文件中,如</font><font face="宋体"><font size="3"> </font>FILE1 
  和 FILE2 是两个不同的文件。我们想在 FILE1 用变量 i (它的类型是 int), 
  但它是在 FILE2 中定义的。我们必须在<font size="3"> </font>FILE1 中说明 i 
  : <font color="#008080"><strong>extern int i;</strong></font></font></p>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">只要 extern 
  的说明的最初定义是在同一个文件中, 并且是在使用它的函数之前, 
  就可以忽略它。<br>
  这里有一个例子: <br>
  /* 定义一个外部变量 */<br>
  int hocus ;<br>
  main()<br>
  {<br>
  &nbsp;&nbsp;&nbsp; /*hocus 没有说明 */<br>
  &nbsp;&nbsp;&nbsp; hocus++ ;<br>
  &nbsp;&nbsp;&nbsp; /* hocus 是外部的尽管它在 main()函数中没有被显式的说明。*/<br>
  &nbsp;&nbsp;&nbsp; ....</p>
  <p ALIGN="JUSTIFY">&nbsp; /* hocus 是 1auto 类型的 */<br>
  &nbsp; int hocus ; <br>
  &nbsp; ...</p>
  </font><p ALIGN="right"><a href="c45.htm#_top.html#_top">返回页首</a></p>
</blockquote>

<hr>
<font FACE="宋体" SIZE="3">

<h3 ALIGN="JUSTIFY"><a name="c454"></a>4.静态变量</h3>
</font>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">在 C 语言中, 有一种特殊的变量: 
  静态变量。<br>
  你可以如下方式说明: <br>
  main()<br>
  {<br>
  &nbsp;&nbsp;&nbsp; ... <br>
  &nbsp;&nbsp;&nbsp; static int i; <br>
  &nbsp;&nbsp;&nbsp; ...<br>
  }</p>
  <p ALIGN="JUSTIFY">现在, 我们看一个例子: </p>
<!-- Aftershock c453.swf 3=550 4=370 40 -->
  <p>
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=3,0,0,0" ID="c453"
  WIDTH="550" HEIGHT="370">
    <param name="movie" value="../movie/c453.swf">
    <param name="quality" value="autohigh">
    <param name="bgcolor" value="#FFFFCC"><embed SRC="../movie/c453.swf" swLiveConnect="FALSE" WIDTH="550" HEIGHT="370"
QUALITY="autohigh" BGCOLOR="#FFFFCC" TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
  </object>
  </p>
<!-- EndAftershock c453.swf -->
  <a href="c45.htm#_top.html#_top"><p align="right">返回页首</a></font></p>
</blockquote>

<hr>
<font FACE="宋体" SIZE="3">

<h3 ALIGN="JUSTIFY"><a name="c455"></a>5.寄存器变量</h3>
</font>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">通常变量是存在计算机内存中的。幸运的话, 
  寄存器变量被存在 CPU 的寄存器中, 
  在寄存器中可以比在内存中更快地访问和操作变量。在其它方面, 
  寄存器变量和动态类变量几乎一样。</p>
  <p ALIGN="JUSTIFY">按这种方式设置寄存器变量: <br>
  main()<br>
  {<br>
  &nbsp;&nbsp;&nbsp; /* i是普通变量 */<br>
  &nbsp;&nbsp;&nbsp; int i;<br>
  &nbsp;&nbsp;&nbsp; /* j是寄存器变量 */<br>
  &nbsp;&nbsp;&nbsp; register int j;<br>
  &nbsp;&nbsp;&nbsp; .. .</p>
  <p ALIGN="JUSTIFY">如果得不到寄存器, 
  寄存器变量变成了普通的自动类变量。访问 j 比访问 i 快多了! </p>
  </font>
</blockquote>

<p align="right"><a href="c45.htm#_top.html#_top">返回页首</a></p>

<p align="center"><a href="http://www.nec.sjtu.edu.cn/support/Course/C/c/c4/c46.htm"><img src="../img/next.gif" width="145" height="30"
alt="next.gif (3633 bytes)" border="0"></a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -