c++ - 按引用调用和按值调用

标签 c++ function pass-by-reference call-by-value

我正在编写一个程序,让用户将一个整数输入到变量 value 中,然后调用两个替代函数,每个函数将所选整数值乘以三倍。 triple_by_value 函数按值传递变量 number,将参数乘以三倍并返回结果。

函数triple_by_reference通过引用传递变量number,并通过引用参数将number的原始值乘以三倍。

#include <iostream>
using namespace std;

int main()
{
    cout << "Enter a number (-1 to end): ";
    cin >> value;

    if (value != -1)
    {
        triple_by_value(value);
        cout << "Triple-By-Value: " << value << endl;
        triple_by_reference(value);
        cout << "Triple-By-Reference: " << value << endl;
    }
    return 0;
}

int triple_by_value(int value)
{
    value *= 3;
    return value;
}

int triple_by_reference(int &value)
{
    value *= 3;
    return value;
}

我似乎遇到了一个问题,函数 triple_by_value 不是,好吧,将值增加三倍,只是按原样打印。

如有任何帮助,我们将不胜感激。

最佳答案

顾名思义,按值传递变量意味着函数只获取变量的值而不访问变量本身。

在您的示例中,int value是与 value 完全不同的变量在 main ,只是它具有相同的值。然而,int &value是对 value 的引用在 main ,这意味着可以安全地将其视为 valuemain本身。

如果你打印 valuetriple_by_valuevalue *= 3 之后你会得到你想要的值(value)。如果你想要valuemain要获得新值,您可以将新值分配给 valuemain通过做value = triple_by_value(value);main , 或者简单地使用 triple_by_reference .

关于c++ - 按引用调用和按值调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27567192/

相关文章:

c++ - 如何使用对象池为 std::map 创建分配器

c++ - Asio async_read_some 模板错误

c++ - 如何使用 range-v3 库从 std::vector 获取列 View 和行 View ?

c++ - 将 Matrix 作为指向函数的指针传递

javascript - 在 JavaScript 中创建函数原型(prototype)?

c++ - (DirectX) 生成旋转矩阵以匹配 vector

php - 函数中的可变长度引用参数列表

java - Java中如何使用引用?

arrays - 更新通过引用传递的数组中的项目

php - 从 javascript 调用 php 函数,onload(AJAX?)