2

我对按名称传递有疑问

   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);
}

我确实提到了关于什么是名称传递以及它是如何工作的早期问题之一

以及其中给出的链接:

通过名称参数传递

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

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

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

4

1 回答 1

1

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

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

于 2014-02-13T10:35:32.683 回答