作业 -
创建一个至少需要三个参数的示例函数。至少应该通过值传递其中一个参数,并且至少应该通过引用传递两个参数。
我创造了以下内容,但如果我做的是正确的事我感到困惑,我对价值和参考感到困惑。
我在int中设置num1 = 30但是将7传递给addThree这是值吗?
#include <iostream>
using namespace std;
//prototype
void addThree (int num1, int& num2, int& num3);
int main()
{
int num1 = 30;
int num2 = 50;
int num3 = 80;
addThree(7, num2, num3);
return 0;
}
void addThree (int num1, int& num2, int& num3)
{
int x;
int y;
int z;
x = num1 + 3;
y = num2 + 3;
z = num3 + 3;
cout << "x value is " << x << endl;
cout << "y value is " << y << endl;
cout << "z value is " << z << endl;
}
打印出来
x值为10
y值为53
z值为83
答案 0 :(得分:1)
你的代码没有任何意义,因为据我所知,你必须证明传递值和传递引用之间的区别。
您可以考虑我将展示的代码作为您的代码的想法
#include <iostream>
void Multiply( int &x, int &y, int n )
{
n /= 2;
x *= n;
y *= n;
}
int main()
{
int x, y;
int n;
std::cout << "Enter x: ";
std::cin >> x;
std::cout << "Enter y: ";
std::cin >> y;
std::cout << "Enter factor: ";
std::cin >> n;
std::cout << "Before the multiplication. x = " << x << ", y = " << y << std::endl;
Myltiply( x, y, n );
std::cout << "After the multiplication. x = " << x << ", y = " << y << std::endl;
}
答案 1 :(得分:0)
通过引用,您正在通过其他名称调用某些内容。根据价值,你可以复制一份
答案 2 :(得分:0)
好吧,我真的不知道你在问什么,但这里是一个简单的价值传递概述,并通过参考传递。
在C ++中,引用基本上是“安全”指针。在维基百科中,它们被定义为:
在C ++编程语言中,引用是一个简单的引用 数据类型不如指针类型强大但更安全 继承自C。
使用&符声明引用。您必须指定引用所引用的实际变量。
int A = 5; // Created an actual integer
int& rA = A; // Created a reference that refers to the integer I declared earlier
当您通过引用将某些内容传递给函数时,您允许该函数修改引用所引用的变量。但是,当您通过值传递时,该函数会创建它自己发送的数据的本地变量副本。对该局部变量的所有更改仅存在于函数的范围内。
这比看到的更好看。观察。
int main()
{
int a = 5;
int& ra = a;
std::cout << a; // Ouput: 5
plus(&a);
std::cout << a; // Ouput: 6
return 0;
}
void plus (int& num)
{
num++;
std::cout << num; // Ouput: 6
}
请注意,当我们通过引用传递时,a
中的main()
已更改。如果我们只是按值传递,就会发生这种情况:
int main()
{
int a = 5;
int& ra = a;
std::cout << a; // Ouput: 5
plus(a);
std::cout << a; // Ouput: 5
return 0;
}
void plus (int num)
{
num++;
std::cout << num; // Ouput: 6
}
答案 3 :(得分:0)
传递值
C总是传递参数by value
:每个参数的值的副本被传递给函数;该函数无法修改传递给它的实际参数。
在程序中,函数void addThree (int num1, int& num2, int& num3)
有一个参数int num1
,它按值传递。
这意味着,当调用该函数时,在addThree
函数堆栈帧中分配了一些内存字节,并且调用时的值即Form语句addThree(7, num2, num3);
值7
为传递了int num1
的记忆。
在哪里,
在pass by reference
中,没有为变量num2 & num3
分配内存,它们将指向与int num2 & num2
函数堆栈帧中main()
相同的地址。
根据您的计划,
x = num1 + 3; // here num 1 is form function addThree () so num1 = 7 and so 7+3 = 10
y = num2 + 3; // here num2 has same address as in the main's num2 so num2= 50, 50+3 = 53
z = num3 + 3;// here num3 has same address as in the main's num3 so num3= 50, 80+3 = 83
希望这有助于您理解By reference and By value
答案 4 :(得分:0)
你的addThree函数是正确的,形式为“addThree(int num1,int&amp; num2,int&amp; num3)”,但只需设置你的参数就可以使它通过num1的值和其他的引用传递。
“int num1”的意思是“创建一个新的int并给它num1的值,然后将它发送给函数”,而“int&amp; num1”意味着这里是我的num1,但无论你在函数内做什么也会改变它在功能之外。
所以你不需要传入7,你可以只说addThree(num1,num2,num3)而你是对的,尝试运行这个版本的代码:
#include <iostream>
using namespace std;
int main() {
void addThree(int num1, int& num2, int& num3);
int num1 = 30;
int num2 = 50;
int num3 = 80;
addThree(num1, num2, num3);
cout << "now, back in main num1 is: " << num1 << endl;
cout << "now, back in main num2 is: " << num2 << endl;
cout << "now, back in main num3 is: " << num3 << endl;
int pause; //just to keep the window open
cin >> pause; //just to keep the window open
return 0;
}
void addThree(int num1, int& num2, int& num3) {
num1 = num1 + 3;
num2 = num2 + 3;
num3 = num3 + 3;
cout << "inside function, num1 is: " << num1 << endl;
cout << "inside function, num2 is: " << num2 << endl;
cout << "inside function, num3 is: " << num3 << endl;
}
请注意,由值传递的num1(由于使用“int num1”而不是“int&amp; num1”)是该函数没有持久影响的唯一int。