You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Free Pascal按引用传值代码结果不符预期问题咨询

Free Pascal代码执行结果异常分析

原因解释

你遇到的情况是因为Free Pascal的表达式求值顺序是从右到左。在语句 z := z + alpha(z); 中,执行流程如下:

  1. 优先执行右侧的函数调用alpha(z)——由于参数是按引用传递(var修饰),函数内部直接修改了外部变量z的值为7,同时函数返回5。
  2. 此时外部的z已经变成7,接下来执行加法运算:7 + 5 = 12,最后将结果赋值给z,所以最终输出12,而非你预期的5。

修正方案

如果要得到预期的5,需要先保存z的初始值,再调用函数,避免函数修改变量影响加法运算。修改后的代码如下:

program callByRef;

var z, temp: integer;

  function alpha(var z: integer): integer;
  begin
    z:= 7;
    alpha:= 5;
  end;

begin

  z:= 0;
  temp := z; // 保存初始值0
  z:= temp + alpha(z); // 用保存的值参与运算

  writeln(z);
  readln;

end.

额外说明

多数编程语言并没有强制规定表达式的求值顺序,不同编译器可能有不同的实现逻辑。Free Pascal采用从右到左的求值顺序,这是它的特定行为,编写代码时需要注意这类细节,避免依赖未定义的求值顺序。

内容的提问来源于stack exchange,提问作者milvus1962

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 22:32:26