通过参考,价值和名字来称呼(Call by reference, value, and name)

2019-08-19 16:05发布

我想了解的参考,值,并命名通话之间的概念差别。

所以,我有以下伪代码:

foo(a, b, c)
{
   b =b++;
   a = a++;
   c = a + b*10
}

X=1;
Y=2;
Z=3;
foo(X, Y+2, Z);

什么是X,Y和Z foo的调用后,如果A,B和C都呼吁通过引用? 如果A,B,和c调用 - 值/导致? 如果A,B和C是调用 - 叫什么名字?

另一种情况:

X=1;
Y=2;
Z=3;
foo(X, Y+2, X);

我试图得到一个良好的开端对即将到来的最后研究,这似乎是一个很好的复习题走了过来。 传址名称绝对是最陌生。

Answer 1:

在按值传递参数,它只是复制功能参数和任何中的值与函数内的变量做并不能反映原始变量如

foo(a, b, c)
{
   b =b++;
   a = a++;
   c = a + b*10
}

X=1;
Y=2;
Z=3;
foo(X, Y+2, Z);
//printing will print the unchanged values because variables were sent by value so any //changes made to the variables in foo doesn't affect the original.
print X; //prints 1
print Y; //prints 2
print Z; //prints 3

但是,当我们通过参考发送参数,变量其中它复制地址意味着无论我们做什么用的功能,在原来的内存位置如实际进行中的变量

foo(a, b, c)
{
   b =b++;
   a = a++;
   c = a + b*10
}

X=1;
Y=2;
Z=3;
foo(X, Y+2, Z);

print X; //prints 2
print Y; //prints 5
print Z; //prints 52

用于通用名称; 传址名称



Answer 2:

按值调用 :正常的方式...实际参数的值复制到形式参数。

通过引用调用 :不是的参数,其地址传递和形式参数是指向实际参数。

按名称调用 :类宏,整个函数定义会替换函数调用和形式参数是实际参数的另一个名称。



Answer 3:

按价值 - 有没有变化出来的功能。 一切行动消失在函数完成。

通过参考 - 你的行动确实改变了变数。 通过名字 - 我从来没有听说过...

通过X + 1没有改变,只是告诉给函数3而不是2或等...



Answer 4:

如果它是通过按值这不会改变X,Y的值或Z。 当您使用功能,如“富()”,它基本上复制变量(X,Y和Z)转换成其他变量(A,B和C)和不与他们的某些行为,不改变原件(X, y和z)。 为你改变一个值,你就必须返回一个值,是这样的:

foo(a, b, c)
{
a = a++;
b = b++;
c = a + b * 10;
return c;
}

x = 1;
y = 2;
z = 3;
z = foo(x, y+2)

则x和y是相同的,但ž将是(X + 1)+(Y + 1)* 10在这种情况下将是32。



Answer 5:

在javascript:

  1. 像字符串的原始类型的变量,数总是通过由值通。
  2. 阵列和对象如参考通被传递或通过基于这些条件值通过。

    • 如果要更改该对象或阵列与新的对象或阵列的值,那么它是通过值传递。

      object1 = {item: "car"}; array1=[1,2,3];

    在这里,你正在分配新的对象或array.you没有改变的旧属性的值object.so它是按值传递。

    • 如果要更改的对象或阵列的属性值,则它是通过引用传递。

      object1.item= "car"; array1[0]=9;

    在这里,你正在改变旧object.you的属性值不分配新的对象或数组老one.so它是通过引用传递。

    function passVar(object1, object2, number1) {

        object1.key1= "laptop";
        object2 = {
            key2: "computer"
        };
        number1 = number1 + 1;
    }

    var object1 = {
        key1: "car"
    };
    var object2 = {
        key2: "bike"
    };
    var number1 = 10;

    passVar(object1, object2, number1);
    console.log(object1.key1);
    console.log(object2.key2);
    console.log(number1);

Output: -
    laptop
    bike
    10


文章来源: Call by reference, value, and name