我有以下程序:
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]时的行为方式)订单是否重要?
答案 0 :(得分:1)
A[0]
= 2和A[1]
= 7的值,因为数组A
和k
都是全局定义的。
由于您明确要求提供详细信息,所以我在这里:
由于数组A
和k
已定义为全局,您可以在所需程序中的 中进行更改。
现在,当您调用语句test(A[1],A[k],k);
时,A[1]
,A[k]
和k
的值的副本将作为a
,b
和c
函数中分别为test()
。
由于这些参数是通过值而不是引用传递的,因此您对变量a
,b
所做的所有更改函数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;
}