在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序。当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。 例4:全局变量和局部变量。 programlocal_global;
var i,k:integer;
procedure sub1;
var i,j:integer;
begin
i:=17;
writeln('i in sub=',i);
writeln('k in sub=',k);
end;
begin
i:=2;k:=9;
writeln('i in main=',i);
writeln('k in sub=',k);
sub1;
writeln('i in main=',i);
writeln('j in main=',j);
readln;
end. 上述程序运行时将出现Unknown Identfier;因为变量j在主程序中没定义。 当删除本语句时。运行结果如下: i in main=2 k in main=9 i in sub=17 k in sub=9 i in main=2 8. 4 值参和变量参数 值形参——传值:调用时可用表达式代替形参,不该变实在参数的值。
变量形参——传地址:调用时必须用变量代替行参变量,改变实在参数的值。 例4:请看下列程序的运行结果。 program li3_10;
var a,b,c:integer;
procedure sub(x,y:integer;var z:integer);
begin
x:=x+1;y:=y+1;z:=x+y;
writeln('sub:x=',x:2,'y=',y:2,'z=',z:2);
end;
begin
a:=1;b:=4;c:=9;
writeln('main:a=',a:2,'b=',b:2,'c=',c);
sub(a,b,c);
writeln('main:a=',a:2,'b=',b:2,'c=',c);
sub(c+5,b*b,a);
writeln('main:a=',a:2,'b=',b:2,'c=',c);
readln;
end. main:a=1 b=4 c=9 sub:x=2 y=5 z=7 main:a=1 b=4 c=7 sub:x=13 y=17 z=30 main:a=30 b=4 c=7
|