?? c45.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>
auto int plox;<br>
....</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>
extern int errupt;<br>
extern char coal;<br>
extern double up;<br>
....</p>
<p ALIGN="JUSTIFY">有兩種情形,
你必須在使用一個外部變量之前先用關鍵字 extern 說明它 。</p>
<p ALIGN="JUSTIFY">情形 1: 如果你在一個文件中,
要在一個外部變量的定義之前使用它, 那么你必須在用之前先用 extern
來說明它。看一個例子: <br>
</font><font face="宋體">try()<br>
{<br>
<font color="#008080"><strong>extern int i;</strong>
</font> <font color="#FF0000"><--- i必須先用</font><br>
i=i+5;<br>
...<br>
}<br>
...<br>
<font color="#008080"><strong>int i;</strong></font>
<font color="#FF0000"><---i在后面定義 </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>
/*hocus 沒有說明 */<br>
hocus++ ;<br>
/* hocus 是外部的盡管它在 main()函數中沒有被顯式的說明。*/<br>
....</p>
<p ALIGN="JUSTIFY"> /* hocus 是 1auto 類型的 */<br>
int hocus ; <br>
...</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>
... <br>
static int i; <br>
...<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>
/* i是普通變量 */<br>
int i;<br>
/* j是寄存器變量 */<br>
register int j;<br>
.. .</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 + -