i信息学奥赛

加入QQ群:1025629106,或关注微信公众号:i信息学奥赛,获取更多学习资源。

导航

全局变量与局部变量

Posted on 2016-12-12 13:35  shnoip  阅读(347)  评论(0编辑  收藏  举报

在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.