C++ 通过引用调用

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

如果我有一个函数接受一个指向整数的指针,并且我从我的 main 传递一个对整数变量的引用,这是按值调用还是按引用调用?示例代码:

#include <iostream>

using namespace std;

void fun(int *a){
//Code block
}

int main(){
    int a = 5;
    fun(&a);
    return 0;
}

在上面的代码中,对函数fun的调用是按值调用还是按引用调用?

最佳答案

您的调用是按值传递,但类型是int*,而不是参数类型int。这意味着创建了指针的拷贝并将其传递给函数。您可以更改它指向的值,但不能更改指针的值。

所以如果你的函数是这样的

void fun(int *a)
{
   *a = 10;
}

然后你像这样从 main 调用

int main() {
    int b = 1;
    fun(&b);
    // now b = 10;
    return 0;
}

您可以通过将指向它的指针传递给您的函数来修改 b 的值。

如果您执行以下操作会产生相同的效果 - 这是通过引用传递

void fun2(int& a) 
{
    a = 5;
}

int main()
{
    int b = 10;
    fun2(b); 

    // now b = 5;
    return 0;
}

现在考虑第三个函数,它按值接受整数参数

void fun3(int a)
{
    a = 10;
}

int main()
{
    int b = 1;
    fun3(b);
    // b  is still 1 now!
    return 0;   
}

通过值传递,fun3 更改传递给它的参数的拷贝,而不是 main 范围内的变量 b

通过(非常量)引用或指针传递允许修改传递给它的参数。按值或 const 引用传递将不允许更改传递给它的参数。

关于C++ 通过引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083174/

相关文章:

c - C 中的逆误差函数

c++ - void foo(int &x) -> ruby ?通过引用传递整数?

javascript - 每 60 秒调用一次函数

c++ - 在函数内部初始化 unsigned char 指针返回空指针

c++ - 如何将临时对象作为非常量引用传递给成员函数?

c++ - std::runtime_error 中的显式构造函数

c++ - 如何将成员函数指针插入映射?

c++ - 从 vector 中删除对象内存的最佳方法

c++ - 多重虚继承

javascript - Private V.S. 令人困惑的例子<Javascript Patterns> 书中的公共(public)方法?