C++ 按值和按引用混淆参数

C++ 按值和按引用混淆参数,c++,C++,分配-- 创建一个至少包含三个参数的示例函数。至少一个参数应通过值传递,至少两个参数应通过引用传递 我创建了以下内容,但我很困惑,如果我做的是正确的事情,我会对价值和参考感到困惑 我在int中设置num1=30,但将7传递给add3,这是按值考虑的吗 #include <iostream> using namespace std; //prototype void addThree (int num1, int& num2, int& num3); int ma

分配--

创建一个至少包含三个参数的示例函数。至少一个参数应通过值传递,至少两个参数应通过引用传递

我创建了以下内容,但我很困惑,如果我做的是正确的事情,我会对价值和参考感到困惑

我在int中设置num1=30,但将7传递给add3,这是按值考虑的吗

#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);
value
7
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;
}