【问题标题】:pass by value/ reference / result按值/引用/结果传递
【发布时间】:2015-05-19 23:21:58
【问题描述】:
procedure p(x : integer); 
begin
  a := 5;
  x := x + 2; 
end

执行以下代码后写下变量a的值:

a := 10;
p(a);

针对以下每个参数传递机制:

(i) 按值调用。一个。 7,10

(ii) 通过引用调用。一个。 12,12

(iii) 按值结果调用。一个。 7,7

下周参加了考试,我得到了模拟试卷的答案,但我对如何在过程调用中将 X 分配给 a 感到困惑。帮助会很棒

谢谢

【问题讨论】:

  • 用逗号隔开的两个数字是什么意思,比如7、10?
  • 对不起。这就是问题的答案,但我不明白 7、10 是怎么回事?
  • 写这个令人困惑的Q的老师实际上是指(i):procedure p(x : integer); 然后(ii)procedure p(var x : integer);和(iii)procedure p(out x : integer);吗?问题暴露得太厉害了,难以置信。
  • Ton profest une Grosse merde incompétente.

标签: pascal


【解决方案1】:

(i) 按值调用

传入 p() 的任何值都会复制到 p() 的堆栈中。 copy 用在 p() 的主体中,所以原始值永远不会改变。如果a 以 7 开头,它将以 7 结尾。

(ii) 引用调用

对原始值的引用提供给 p(),以便更改引用指向的值以影响原始变量。 a 在 p() 返回后会有一个新值。

如果a 以 12 开头,它将以 7 结尾,因为它首先在 p() 的主体中分配了 5 的值,然后该值增加了 2。

(iii) 按值结果调用

这类似于引用调用,除了在形参和实参之间没有创建别名。 See details.

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 2014-09-14
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2013-04-12
    • 2012-01-16
    相关资源
    最近更新 更多