?? 24.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="Author" content="wdg">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>網上學堂 --> C語言編程寶典之一 --> 4. 變量</title>
</head>
<body>
<p> </p>
<div align="center"><center>
<table border="1" cellpadding="4" width="640"
bordercolordark="#FFFFFF" bordercolorlight="#FFFFFF">
<tr>
<td bgcolor="#FFE6B0" bordercolor="#8080FF" class="p9"><font
color="#BB0000">導航條:--></font> <a
href="../../index.html">網上學堂</a> --> <a
href="../tcindex.htm"><font face="宋體">C</font>語言編程寶典之一</a>
--> 4. 變量 </td>
</tr>
<tr>
<td bordercolor="#8080FF" class="p9"> 4.1
變量說明 <br>
Turbo C2.0規定所有變量在使用前都必須中以說明。一條變量說明語句由數據
<br>
類型和其后的一個或多個變量名組成。變量說明的形式如下:
<br>
類型 <變量表>; <br>
這里類型是指Turbo C2.0的有效數據類型。變量表是一個或多個標識符名,
每 <br>
個標識符之間用","分隔。 <br>
例如: <br>
int i, j, k; unsigned char c, str[5], *p; <p>
4.2 變量種類 <br>
變量可以在程序中三個地方說明:
函數內部、函數的參數定義中或所有的函數
<br>
外部。根據所定義位置的不同,
變量可分為局部變量、形式參數和全程變量。
<br>
一、局部變量 <br>
局部變量是指在函數內部說明的變量(有時也稱為自動變量)。用關鍵字auto進
<br>
行說明, 當auto省略時,
所有的非全程變量都被認為是局部變量,
所以auto實際上 <br>
從來不用。 <br>
局部變量在函數調用時自動產生,
但不會自動初始化, 隨函數調用的結束, 這 <br>
個變量也就自動消失了,
下次調用此函數時再自動產生, 還要再賦值,
退出時又自 <br>
動消失。 </p>
<p> 二、形式參數 <br>
形式參數是指在函數名后面的小括號里定義的變量,
用于接受來自調用函數的 <br>
參數。形式參數在函數內部可以象其它局部變量那樣來作用。
<br>
例如: <br>
puthz(int x, int y, int color,
char *p) <br>
{ <br>
int i, j, k; /*定義局部變量*/ <br>
<程序體> <br>
} <br>
其中x, y, color, *p為函數的形式參數,
不需要再進行說明就可在該函數內 <br>
直使用。 </p>
<p> 三、全程變量 <br>
全程變量是指在所有函數之外說明的變量,
它在整個程序內部者是"可見的", <br>
可以被任何一個函數使用,
并且在整個程序的運行中都保留其值。全程變量只要滿
<br>
足在使用它以前和函數以外這兩個條件,
可在程序的任何位置進行說明, 習慣上通 <br>
常在程序的主函數前說明。 <br>
例如: <br>
#include<stdio.h> <br>
int test;
/*定義全程變量*/ <br>
void f1(int x, float y); /*子函數說明*/
<br>
void f2(void);
/*子函數說明*/ <br>
main() <br>
{ <br>
test=5;
/*給全程變量賦值*/ <br>
f1(20, 5.5); /*調用有形式參數的子函數f1()*/
<br>
/*test的值變成115*/ <br>
f2();
/*調用f2(), test的值變為1150*/ <br>
} <br>
void f1(int x, float y) <br>
{ <br>
float z;
/*z定義為局部變量*/ <br>
z=x*y;
/*計算*/ <br>
test=test+z; <br>
} <br>
void f2(void) <br>
{ <br>
int count=10; /*定義局部變量并初始化*/
<br>
test=test*count; <br>
} </p>
<p>
由于全程變量可被整個程序內的任何一個函數使用,
所以可作為函數之間傳遞 <br>
參數的手段, 但全程變量太多時,
內存開銷變大。 <br>
4.3 變量存儲類型 <br>
Turbo C2.0支持四種變量存儲類型。說明符如下:
<br>
auto
static extern
register <br>
下面分別來介紹。 <br>
一、auto <br>
auto稱為自動變量,
已在前面作了介紹, 這里不再重復。 <br>
二、static <br>
static稱為靜態變量。根據變量的類型可以分為靜態局部變量和靜態全程變量。
<br>
1. 靜態局部變量 <br>
它與局部變量的區別在于:
在函數退出時, 這個變量始終存在,
但不能被其它 <br>
函數使用, 當再次進入該函數時,
將保存上次的結果。其它與局部變量一樣。
<br>
2. 靜態全程變量 <br>
Turbo C2.0允許將大型程序分成若干獨立模塊文件分別編譯,
然后將所有模塊 <br>
的目標文件連接在一起, 從而提高編譯速度,
同時也便于軟件的管理和維護。靜態 <br>
全程變量就是指只在定義它的源文件中可見而在其它源文件中不可見的變量。它與
<br>
全程變量的區別是:
全程變量可以再說明為外部變量(extern),
被其它源文件使用, <br>
而靜態全程變量卻不能再被說明為外部的,
即只能被所在的源文件使用。 <br>
三、extern <br>
extern稱為外部變量。為了使變量除了在定義它的源文件中可以使用外,
還要 <br>
被其它文件使用。因此,
必須將全程變量通知每一個程序模塊文件,
此時可用 <br>
extern來說明。 <br>
例如: <br>
文件1為file1.c
文件2為file2.c <br>
int i, j;/*定義全程變量*/
extern int i, j;/*說明將i, j從 <br>
文件1中復制過來*/ <br>
char c;
extern char c; /*將c復制過來*/ <br>
void func1(int k);
func2() /*用戶定義函數*/
<br>
{ <br>
main()
static float k;/*定義靜態變量*/ <br>
{
i=j*5/100; <br>
func1(20);/*調用函數*/
k=i/1.5; <br>
func2();
. <br>
.
. <br>
.
. <br>
.
} <br>
} <br>
func1(int k) /*用戶定義函數*/
<br>
{ <br>
j=k*100; <br>
} </p>
<p> 對于以上兩個文件file1.c和file2.c,
用Turbo C2.0的集成開發環境進行編譯 <br>
連接時, 首先應建立一個.prj的文件。例如file.prj,
該文件內容如下: <br>
file1.c <br>
file2.c <br>
然后將file.prj的文件名寫入主菜單Project中的Project
Name項中。 再用F9 <br>
編譯連接, 就可產生一個文件名為fioe.exe的可執行文件。
<br>
外部變量和FORTRAN語言中的COMMOM定義的公共變量一樣。
<br>
register稱為寄存器變量。它只能用于整型和字符型變量。定義符register說
<br>
明的變量被Turbo C2.0存儲在CPU的寄存器中,
而不是象普通的變量那樣存儲在內 <br>
存中, 這樣可以提高運算速度。但是Turbo C2.0只允許同時定義兩個寄存器變量,
<br>
一旦超過兩個,
編譯程序會自動地將超過限制數目的寄存器變量當作非寄存器變量
<br>
來處理。因此,
寄存器變量常用在同一變量名頻繁出現的地方。
<br>
另外,
寄存器變量只適用于局部變量和函數的形式參數,
它屬于auto型變量, <br>
因此,
不能用作全程變量。定義一個整型寄存器變量可寫成:
<br>
register int a; <br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -