C++ 按值和按引用混淆参数
分配-- 创建一个至少包含三个参数的示例函数。至少一个参数应通过值传递,至少两个参数应通过引用传递 我创建了以下内容,但我很困惑,如果我做的是正确的事情,我会对价值和参考感到困惑 我在int中设置num1=30,但将7传递给add3,这是按值考虑的吗C++ 按值和按引用混淆参数,c++,C++,分配-- 创建一个至少包含三个参数的示例函数。至少一个参数应通过值传递,至少两个参数应通过引用传递 我创建了以下内容,但我很困惑,如果我做的是正确的事情,我会对价值和参考感到困惑 我在int中设置num1=30,但将7传递给add3,这是按值考虑的吗 #include <iostream> using namespace std; //prototype void addThree (int num1, int& num2, int& num3); int ma
#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;
}
#包括
使用名称空间std;
//原型
无效加三(整数m1、整数和整数m2、整数和整数m3);
int main()
{
int num1=30;
int num2=50;
int num3=80;
增加三(7,num2,num3);
返回0;
}
无效添加三(整数m1、整数和整数m2、整数和整数m3)
{
int x;
int-y;
intz;
x=num1+3;
y=num2+3;
z=num3+3;
通过引用,你可以用另一个名字来称呼某事物。通过值,你可以复制一份。好吧,我真的不知道你在问什么,但这里有一个关于通过值和通过引用的简要概述
在C++中,引用基本上是“安全”指针。在维基百科中,它们被定义为:
<>在C++程序设计语言中,引用是简单的引用。
比指针类型功能更弱但更安全的数据类型
继承自C
使用符号AND声明引用。必须指定引用引用的实际变量
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
}
在代码中没有什么伟大的意义,因为据我所知,您必须演示按值传递和按引用传递之间的区别
<>你可以考虑我将显示的代码作为你的代码的想法。
#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;
}
#包括
空乘(整数与x、整数与y、整数与n)
{
n/=2;
x*=n;
y*=n;
}
int main()
{
int x,y;
int n;
std::cout>x;
std::cout>y;
std::cout>n;
标准::cout传递值
C总是按值传递参数:每个参数的值的副本传递给函数;函数无法修改传递给它的实际参数
与在程序中一样,函数void addThree(int num1,int&num2,int&num3)
有一个参数int num1
,该参数通过值传递
这意味着,当调用函数时,在addThree
函数堆栈帧中分配一些内存字节,调用时的值,即Form语句addThree(7,num2,num3);
value7
在int num1
的内存中传递
作为,
在passbyreference
中,没有为变量num2&num3
分配内存,它们将指向与main()
函数堆栈帧中的int num2&num2
相同的地址
按照你们的计划
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
希望这将帮助您理解通过引用和通过值的概念您的addThree函数的形式是“addThree(int num1,int&num2,int&num3)”,但仅通过设置这样的参数,它就可以通过引用传递num1和其他函数的值
“int num1”表示“创建一个新的int并给它num1的值,然后将其发送给函数”,而“int&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;
}
#包括
使用名称空间std;
int main(){
无效加三(整数m1、整数和整数m2、整数和整数m3);
int num1=30;
int num2=50;
int num3=80;
添加三个(num1、num2、num3);
cout闻起来像是家庭作业……从技术上讲,你可以在函数或main()中没有任何内容的情况下完成作业
。只需创建一个包含三个参数的空函数,一个按值,两个按引用。完成。@WhozCraig听起来像是我做作业的最简单方法。这种方法在计算机科学课上似乎总是有效。哈。在乘法中添加对n
的修改(显然)在main()
中不更改n
,我将很快投票表决这是一个通过引用传递与通过值传递的好例子。@WhozCraig我添加了一个修改n.:)如果我声明num 1=10,但随后将7传递到function@Jessica如果使用addThree(num1、num2、num3)
那么addThree
中的num1
的值将是10,因为main中的num1=10
TY!,这正是我在前后寻找打印输出的内容,因此我可以看到更改。
#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;
}