IN, OUT, INOUT Parameters

IN, OUT, INOUT Parameters

本文关键字:Parameters INOUT OUT IN      更新时间:2023-10-16

请解释程序的执行情况,以及为什么它会生成如此特定的输出。

输出为

6 10 20
6 10 8
2 2 14

我的猜测是,这是由于IN、OUT、INOUT参数造成的,但我并不真正理解

#include <iostream>
using namespace std;
void sunny(int&, int);
void cloudy(int, int&);
int temp;
int main()
{
int num1 = 6;
int num2 = 10;
temp = 20;
cout << num1 << " " << num2 << " " << temp << endl;
sunny(num1, num2);
cout << num1 << " " << num2 << " " << temp << endl;
cloudy(num1, num2);
cout << num1 << " " << num2 << " " << temp << endl;
}
void sunny(int& a, int b)
{
int w;
temp = (a + b) / 2;
w = a / temp;
b = a + w;
a = temp - b;
}
void cloudy(int u, int& v)
{
temp = 2 * u + v;
v = u;
u = v - temp;
}

实际上输出是:

6 10 20
2 10 8
2 2 14

我们可以看到这样的步骤:

阳光呼叫:

temp = (6 + 10)/2 = 8
w = 6/8 = 0 //This is because w is declared int, and int(6/8) = 0
b = 6 + 0 = 10
a = 8 - 6 = 2

因此,由于引用参数的原因,num1现在是2,而temp由于其全局而更改为8

多云呼叫:

temp = 2 * 2 + 10 = 14
v = 2
u = 2 - 14 = -12 //This variable is doing nothing

因此num2现在是2,原因和以前一样,temp是14