有以下程序请大虾们解释一下它的执行顺!
program aa;
  var a,x,y,z:integer;
function q(m:integer):integer;
  begin
    z:=z+m;
    q:=succ(m)
  end;
begin
   z:=3;
   a:=q(2)*q(z);   {主要是这句的执行?}
   writeln(a:3,z:3);
readln
end.
执行结果为:12 8

解决方案 »

  1.   

    我执行的结果是18,10顺序是
    1. q(2) = 3,这时z= (2+3);
    2. q(z) = q(5) = 6; z = 5+ 5=10
    3 a = 3 *6 = 18;
      

  2.   

    程序的执行顺序是:高优先级的优先然后是从左到右if (z<>nil) and (z.GetParams()=1) then
      s1
    ....实际上执行的是
    1.  z<>nil
    2.  z.GetParams()=1,因为z<>nil执行在前,所以隐含了z<>nil,否则报错
    可以拆解为:
    if z<>nil then
    begin
      if z.GetParams()=1 then
    end;另:
      IsOK :=CheckBox1.Checked and (Application.MessageBox('确认吗?','信息',MB_YESNO+MB_ICONQUESTION) = ID_YES);