|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
位于括号内的语句集称为代码块或复合语句。注意,包括main在内的所有函数都使用复合语句。代码块具有字节的声明语句和其他语句。一个代码块又位于某个函数体或另一个代码块之中,这样创建的代码块称为嵌套代码块。
& @2 a. d6 j. G6 G0 V9 Dmain()
: K1 T2 [ f4 ]) X$ U5 R7 f* \{5 k* d# J$ B" Z3 N: w) i
inta=20; K7 K6 E; W( o! }: w) L
intb=10;! s6 D' U) C5 l! N" @0 w
......
( ?! w* s* \- j, c4 Y9 \0 x {" e8 n. f7 t% y. r8 b1 ~. Q6 {5 x& t0 P
inta=0;5 Z6 [, A4 ^" w
intc=a+b;
+ U8 W8 c) X$ k ......* p! B- G" i0 x3 [
}
: X# s! \' T. V& p1 Z6 o b=a;0 j) ?8 f* y* |( l5 ^* b- E
}
) M8 B, I9 `: r# G& N; J/ q当运行该程序时,c的值为10,而不是30.语句b=a把a的值10赋给b。尽管a的作用范围到main的末尾,但由于内部代码块又声明了变量a,因此在内部代码块中是不可见的。但是,当离开内部代码块时,内部的a不再在其作用范围之内,外部的a又变为可见的了。
0 _2 G4 Y6 M2 R( Z* j& F记住,变量b在内部代码块中没有重新声明,因此它对这两个代码块都是可见的。这就是为什么当计算下面语句时:( Z! B* A, A6 c: z+ o
int c=a+b;
8 s. |- C% B X# o0 Y$ ]( [3 B: I! c( Ta的值为0,而b的值为10.
! Z [+ ]0 y' q) {' P' Mmain函数的变量对内部代码块是可见的,反过来则不对。
9 E$ D8 E' z# }关于作用范围的规范
4 s, }8 C- T9 V& X; D作用范围: |, F+ e5 X; V6 i6 i6 B' }- Y! [
指的是变量可用的程序区间。
% R7 \( o( H' N5 t" W9 d可见性
. l) D" x9 u% L! H2 q程序可以从内存访问变量的能力" a, ?1 u; S8 ]! B
生存期; Q1 X2 `" ?$ k8 K& Y7 k* J0 T) C
程序运行时,变量存在的时间。! }# M9 ?4 x! c& k1 ~
使用规则
3 W# h% [" u2 S' ]3 r(1) 全局变量的作用范围是整个程序文件。$ W8 o7 I, [9 U6 E/ G
(2) 局部变量的作用范围是从该变量的声明位置开始,直到声明它的代码块或函数末尾为止。8 h) X; x3 j. D" T
(3) 函数形参的作用范围为函数本身内。0 R2 ]5 s9 r7 y) q6 N6 W9 v
(4) 在main中的声明的auto变量的生存期为整个程序运行时间,尽管其作用范围为main函数内。8 d3 `7 M7 b# N4 b( \. y
(5) 当函数退出时,auto变量的生存期结束。
9 c: m' g2 g4 B/ A; {2 ?(6) 尽管static变量的作用范围为其函数内,但其生存期一直到程序运行结束。. p0 n8 c; g* r; W
(7) 如果不重新进行声明,左右变量只在其作用范围内是可见的。% x8 F5 f. I+ ^
(8) 如果某个变量在其作用范围内重新进行声明,那么在重声明变量的作用范围内。 |
|