在Pascal语言中所有的变量在使用之前必须先定义,在主程序中有变量说明语句,在过程和函数中也有变量说明语句,那么在整个程序中先后说明的变量的适用范围有可能是不一样的,即同一个程序中各个变量的作用域不一定相同。一般说来,一个变量的作用域是从定义这个变量的那条语句起,直到该说明语句所在的程序(或过程、函数体)的最后一个end止的这段源程序,超过这个范围,便失去意义。
全局变量是指在程序开头部分说明的变量,局部变量是指在过程体和函数体内说明的变量。在程序中,全局变量和局部变量的作用域不一样。
局部变量的作用域指它所在的子程序(函数或过程),由于形式参数只在子程序中有效,也属于局部变量。过程(或函数)中的局部变量和形式参数其作用域仅限于该过程(或函数)内部,不能在过程(或函数)以外使用,这就是我们所说的过程(或函数)执行结束局部变量和参数就消失了。
全局变量的作用域分两种情况:
1、当全局变量和局部变量不同名时,其作用域是整个程序范围(包括程序中定义的子程序)
2、当全局变量和局部变量同名时,全局变量的作用域不含局部变量的作用域
例1:查看程序运行结果
var
a,b:integer;
procedure swap;
var
t:integer;
begin
t:=a;
a:=b;
b:=t;
end;
begin
a:=1;
b:=2;
writeln(a:4,b:4);
swap;
writeln(a:4,b:4);
end.
例2:查看程序运行结果
var
i,j:integer;
procedure sample(x:integer;var y:integer);
begin
x:=x+2;y:=y+2;
end;
begin
i:=0;j:=0;
sample(i,j);
writeln(i,j);
end.
例3:查看程序运行结果
var
x:integer;
procedure abc;
begin
x:=5;
writeln('**',x,'**');
end;
begin
x:=3;
writeln('***',x,'***');
abc;
writeln('***',x,'***');
end.
例4:查看程序运行结果
var
x:integer;
procedure abc;
var
x:integer;
begin
x:=5;
writeln('**',x,'**');
end;
begin
x:=3;
writeln('***',x,'***');
abc;
writeln('***',x,'***');
end.