3.2 标识符 _jkH}o '
所谓标识符是指常量、变量、语句标号以及用户自定义函数的名称。 Turbo C .I%p0ds1r
2.0标识符的定义十分灵活。 sU>!sxW
)Ih'0>=
作为标识符必须满足以下规则: LwDm(gG
`uRf*-
'_)NI
1. 所有标识符必须由一个字母(a~z, A~Z)或下划线(_)开头; L`E^BuP/
2. 标识符的其它部分可以用字母、下划线或数字(0~9)组成; d5?"GFy
3. 大小写字母表示不同意义, 即代表不同的标识符; ]^9B%t
s9
4. 标识符只有前32个字符有效; =/xTUI4
5. 标识符不能使用Turbo C2.0的关键字。 {oIv%U9
)U4h?J
下面举出几个正确和不正确的标识符: fJ"#c<n
正确 不正确 -oGJPl {r
smart 5smart 2w>lnJ-
_decision bomb? TE+d?
key_board key.board UO%VuC5B
FLOAT float dxm_AUM
4
qdLH^dX
4. 变量 {4u8~whLp
TUeW-'/1
4.1 变量说明 7bBOV(/s
Turbo C2.0规定所有变量在使用前都必须中以说明。一条变量说明语句由数据 56!>}!8!
类型和其后的一个或多个变量名组成。变量说明的形式如下: H`!%"
类型 <变量表>; f@@2@#
5B
这里类型是指Turbo C2.0的有效数据类型。变量表是一个或多个标识符名, 每 9d ZE#l!Q
个标识符之间用","分隔。 ppcuMcR{
例如: [5&zyIi
int i, j, k; unsigned char c, str[5], *p; Q8:`;W
1S!<D)n
4.2 变量种类 hR;J#w
变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数 Mv9q-SIc[
外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。 ]KX _a1e
一、局部变量 I{Pny/d`
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 /rRQ*m_
行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 Wj N0KA
从来不用。 DwTqj=l
局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这 @D.]PZf
个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自 BaSNr6
YW
动消失。 I W_:nm6
\L14rQ
t
二、形式参数 H]:z:AAvX
形式参数是指在函数名后面的小括号里定义的变量, 用于接受来自调用函数的 _E({!t"`
参数。形式参数在函数内部可以象其它局部变量那样来作用。 ,l[h9J
例如: D8+68_BEM
puthz(int x, int y, int color, char *p) ^Pc>/lY$Q%
{ i*16kdI.
int i, j, k; /*定义局部变量*/ 6`LC(Nv%-n
<程序体> C9oF*{
} 2Z]<MiAx D
其中x, y, color, *p为函数的形式参数, 不需要再进行说明就可在该函数内 !oXA^7Th6]
直使用。 #UN(R
Rg*zUfu5%o
三、全程变量 ?H9F"B$a
全程变量是指在所有函数之外说明的变量, 它在整个程序内部者是"可见的", G-FTyIP>'
可以被任何一个函数使用, 并且在整个程序的运行中都保留其值。全程变量只要满 r30t`o12i
足在使用它以前和函数以外这两个条件, 可在程序的任何位置进行说明, 习惯上通 r.e,!B s
常在程序的主函数前说明。 2i);2>HLG
例如: phIEz3Fu/
m.~&n!1W*`
$mA+4ISK
#include
<,~
=o
int test; /*定义全程变量*/ iR-MuDM
void f1(int x, float y); /*子函数说明*/ 13s0uyYU<m
void f2(void); /*子函数说明*/ 51oZw%os=
main() Q
!5P
{ Ed/@&52z0
test=5; /*给全程变量赋值*/ {b@rQCre7
f1(20, 5.5); /*调用有形式参数的子函数f1()*/ amI$0
/*test的值变成115*/ &lYKi3}x
f2(); /*调用f2(), test的值变为1150*/ ],r?]>
} "i$uV3d
void f1(int x, float y) }vOUf#^k
{ _q([k_4h
float z; /*z定义为局部变量*/ cK.T=7T
z=x*y; /*计算*/ md[FtcY\
test=test+z; CL(,Q8yG
} EXz5Rue
LV
void f2(void) I>b-w;cC
{ +NRn>1]
int count=10; /*定义局部变量并初始化*/
hA`>SkO
test=test*count; kP%Hg/f/Ot
} 7lpd$Y
aE^tc'h~
由于全程变量可被整个程序内的任何一个函数使用, 所以可作为函数之间传递 ?v2OoNQ
参数的手段, 但全程变量太多时, 内存开销变大。 g
j`"|
dG{`Jk
pk'@!|g%=
ki6`d?
4.3 变量存储类型 ~Z5?\a2Ld
Turbo C2.0支持四种变量存储类型。说明符如下: OT7F#:2`
auto static extern register .kM74X=S
下面分别来介绍。 Hk-)fl#dr
hoASrj{s
_t:cDXj
一、auto 7p}G!]`
auto称为自动变量, 已在前面作了介绍, 这里不再重复。 ^o't&
o a,Ju
二、static 9d2#=IJm
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。 ma LJ M\C
}+`W[ h&u
{jzN
1. 静态局部变量 P f oAg*
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它 D%LM"p
函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。 *?oQ6g(Nz
v8Nc quv
5|1&s3/f
2. 静态全程变量 X|L8s$>
Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块 okX\z[X
的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态 x&R&\}@G m
全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与
1W;3pN
全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用, 3m4?l
~
而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。 c1/Gyq
e4NT
@6GM)N\{[
+7<{yP6wU
三、extern _u}v(!PI
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要 (7
Mn%Jp
被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用 t Zj6=#
extern来说明。 #ITx[X89|
例如: 0c1}?$f[?%
文件1为file1.c 文件2为file2.c $XFG1?L!
int i, j;/*定义全程变量*/ extern int i, j;/*说明将i, j从 49
3ik
文件1中复制过来*/ Xvs{2
char c; extern char c; /*将c复制过来*/ 5fb,-`m.
void func1(int k); func2() /*用户定义函数*/ ]^gD@].
{ }M/w 0U0o
main() static float k;/*定义静态变量*/ y{ 90A
{ i=j*5/100; o<-%)#e
func1(20);/*调用函数*/ k=i/1.5; 'xb|5_D
func2(); . VO(Ck\i}
. . ?w#
>Cs(
. . I(Nsm3L
. } lGPC)Hu{`
} S^)r,cC
func1(int k) /*用户定义函数*/ Wnl8XHPn
{ !5`}s9hsF_
j=k*100; h.
i&[RnX
} LH4-b-
oAWk<B(@
对于以上两个文件file1.c和file2.c, 用Turbo C2.0的集成开发环境进行编译 QAi(uL5
连接时, 首先应建立一个.prj的文件。例如file.prj, 该文件内容如下: Yx&cnDx
file1.c |f8by\Q86=
file2.c |]A{8BBC
然后将file.prj的文件名写入主菜单Project中的Project Name项中。 再用F9 ao{>.b
编译连接, 就可产生一个文件名为fioe.exe的可执行文件。 P;
}Z
3!
外部变量和FORTRAN语言中的COMMOM定义的公共变量一样。 RYE::[O7
$},:z]%D
TFxb\
四、register EhB9M!Y`@
register称为寄存器变量。它只能用于整型和字符型变量。定义符register说 QY+#Vp<`
明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内 #2ZXYH}
存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量, 0&/1{Dk*n
一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量 B<1*p,z
来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。 `1EBnL_1
另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量, 1`O`!plD+
因此, 不能用作全程变量。定义一个整型寄存器变量可写成: 46_<v=YSJ
register int a; 'n:Ft
对于以上所介绍的变量类型和变量存储类型将会在以后的学习中, 通过例行程 %~p_bKd~
序中的定义、使用来逐渐加深理解。 N/{A'
Wd
yN3Tk}{V
Q77qrx3
4.4 数组变量 8kJ k5
所谓数组就是指具有相同数据类型的变量集, 并拥有共同的名字。数组中的每 '0
(Bb
个特定元素都使用下标来访问。数组由一段连续的存贮地址构成, 最低的地址对应 _$ixE~w-!
于第一个数组元素, 最高的地址对应最后一个数组元素。数组可以是一维的、也可 T|.Q81.NE
以是多维的。Turbo C2.0象它高级语方一样也使用数组变量。 FZ=6x}QZ
cYR6+PKua
一、一维数组 bwVv#Z\r
一维数组的说明格式是: ]Jnf.3
类型 变量名[长度]; YGWb!|Z$
类型是指数据类型, 即每一个数组元素的数据类型, 包括整数型、浮点型、字 +1d\ZZA|6&
符型、指针型以及结构和联合。 #-'}r}1ZT
例如: |B` -chK
int a[10]; C2<y(GU[Bh
unsigned long a[20]; NYP3uGH]
char *s[5]; .yTk/x?
char *f[]; sF+0v p
I J4"X#Q/
说明: %-A8`lf<
1. 数组都是以0作为第一个元素的下标, 因此, 当说明一个int a[16] 的整型 2 )j\Lg_M
数组时, 表明该数组有16个元素, a[0]~a[15], 一个元素为一个整型变量。 1.,mNY^UN
d`~#uN {
1xguG7
2. 大多数字符串用一维数组表示。数组元素的多少表示字符串长度, 数组名 c+a f=ac
表示字符串中第一个字符的地址, 例如在语句char str[ 8] 说明的数组中存入 f{AgKW9"
"hello"字符串后, str表示第一个字母"h"所在的内存单元地址。str[0] 存放的是 ,dVCbAS@
字母"h"的ASCII码值, 以此类推, str[4]存入的是字母"o"的ASCII码值, str[5]则 (la<X<w
应存放字符串终止符'\0'。 sx]?^KR:
OM4s.BLY
do[K-r
3. Turbo C2.0对数组不作边界检查。例如用下面语句说明两个数组 CCEx>*E6c
char str1[5], str2[6]; 0[v :^H
当赋给str1一个字符串"ABCDEFG"时, 只有"ABCDE"被赋给, "E" 将会自动的赋 c4-&I"z
给str2, 这点应特别注意。 &V=54n=O?
:ZL>JVk
三、多维数组 Vj2GK"$v
多维数组的一般说明格式是: xZ@Y`2A':
类型 数组名[第n维长度][第n-1维长度]......[第1维长度]; H<1?<1^
这种说明方式与BASIC、FORTRAN等语言中多维数组的说明不一样。 #Ejly2C,
$--PA$H27
21o_9=[^
例如: NWAF4i&$
int m[3][2]; /*定义一个整数型的二维数组*/ L//sJe
char c[2][2][3]; /*定义一个字符型的三维数组*/ Ra{B8)Q
数组m[3][2]共有3*2=6个元素, 顺序为: COHJJONR
m[0][0], m[0][1], m[1][0], m[1][1], m[2][0], m[2][1]; dlT\VWMha(
数组c[2][2][3]共有2*2*3=12个元素, 顺序为: _O!D*=I
c[0][0][0], c[0][0][1], c[0][0][2], >}4]51s
c[0][1][0], c[0][1][1], c[0][1][2], ) F~>
c[1][0][0], c[1][0][1], c[1][0][2], [CUJ A
c[1][1][0], c[1][1][1], c[1][1][2], c%Gz{':+
数组占用的内存空间(即字节数)的计算式为: zr[~wM
字节数=第1维长度*第2维长度*...*第n维长度*该数组数据类型占用的字节数 19N:9;Ixz
xJ"Zg]d{
4.5 变量的初始化和赋值 1)YFEU&]
J:(Shd'4D
一、变量的初始化 8^R>y
变量的初始化是指变量在被说明的同时赋给一个初值。Turbo C2.0中外部变量 8m1zL[.8g
和静态全程变量在程序开始处被初始化, 局部变量包括静态局部变量是在进入定义 > T-O3/KN
它们的函数或复合语句时才作初始化。所有全程变量在没有明确的初始化时将被自 ,B#Y9[R
动清零, 而局部变量和寄存器变量在未赋值前其值是不确定的。 ^m+W
对于外部变量和静态变量, 初值必须是常数表达式, 而自动变量和寄存器变量 ,gOQIS56
可以是任意的表达式, 这个表达式可以包括常数和前面说明过的变量和函数。 J,D{dYLDD
&