解释按引用调用和复制/恢复之间的区别

时间:2015-01-21 18:27:43

标签: c++ function

我有以下程序:

int A[3];
k = 1

void test(int a, int b, int c) {
     c = 0;
     b = 1;
     A[k] = 7;
     a++;

}

接下来我使用复制还原

运行此方法
A[0] = 2;
A[1] = 4;
k = 1;
test(A[1],A[k],k);

我知道k将为0.

编辑

我想知道如何使用复制 - 恢复而不是按值,参考等来计算它.K将为0,因为它已分配给c并且在功能完成后它&# 39; s复制到k。以下是What's the difference between call by reference and copy/restore的解释,但是两个值(a和b具有相同的值A [1]时的行为方式)订单是否重要?

2 个答案:

答案 0 :(得分:1)

A[0] = 2和A[1] = 7的值,因为数组Ak都是全局定义的。

由于您明确要求提供详细信息,所以我在这里:

由于数组Ak已定义为全局,您可以在所需程序中的 中进行更改。 现在,当您调用语句test(A[1],A[k],k);时,A[1]A[k]k的值的副本将作为abc函数中分别为test()

由于这些参数是通过而不是引用传递的,因此您对变量ab所做的所有更改函数c中的test()不会影响A[1]A[k]k。只有直接引用全局变量(如A[k] = 7;)的语句才会受到影响,因为它们是全局

希望它有所帮助。

答案 1 :(得分:0)

K未定义。 以下程序输出1:

#include<bits/stdc++.h>
using namespace std;

int A[3];
int k = 1;

void test(int a, int b, int c) {
     c = 0;
     b = 1;
     A[k] = 7;
     a++;

}
int main()
{
A[0] = 2;
A[1] = 4;
k = 1;
test(A[1],A[k],k);
cout<<k<<endl;
return 0;
}