【问题标题】:Evaluation of variable through Pass By Name通过名称传递评估变量
【发布时间】:2014-02-13 01:57:17
【问题描述】:

我对按名称传递有疑问

   Procedure test ( int c, int d) 
    { 
      int k = 10;

      c = 5;

      d = d + 2 ;

      k = c + d;

      print (k);
}

main()
{
    k = 1;

    test(k,k);

    print (k);
}

我确实提到了what is pass by name and how does it work 上的早期问题之一

以及其中给出的链接:

Pass by name parameter passing

我的问题是:上面的代码会打印:( 14 , 1 ) 还是 (14, 14)

基本上怀疑是过程中k的值是否反映在主过程中。

我正在准备考试。这是一个问题库中给出的代码 sn-p。

【问题讨论】:

    标签: history pass-by-name algol


    【解决方案1】:

    按名称传递,当您传递变量而不是更复杂的表达式时,其行为与按引用传递相同。因此,您的代码会打印 14 和 7。

    请注意,过程test 中的局部变量k 与全局变量k 不是同一个变量。在test 中,分配c = 5 和d = d + 2 都分配给全局k,因为它通过c 和d 按名称传递给test。因此,在这些分配之后,全局k 具有值7。赋值k = c + d; 影响局部变量k(因为那是当时范围内的k),而不是全局变量k(被局部变量遮蔽),因此全局变量@987654337 @ 在赋值后保留7 的值。

    【讨论】:

    • 嘿,谢谢同上,这真的很有帮助。所以这里按名称传递的行为类似于按引用传递。
    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多