我不明白在下面的代码中使用引用调用如何将结构传递给函数?

I am not getting how the structure is being passed to a function in following code using call by reference?

提问人:Shubham Patil 提问时间:2/3/2022 更新时间:2/3/2022 访问量:69

问:

就像在这段代码中一样,我不明白的是 'n1' [ increment(n1) ] 是如何传递给 'number& n2'[void increment(number& n2)] 的。 我们如何将 N1 传递到 &N2? 如果我弄错了基础知识,请告诉我,因为直到最近我才开始学习 C 和 C++。

// C++ program to pass structure as an argument
// to the functions using Call By Reference Method

#include <bits/stdc++.h>
using namespace std;

struct number {
    int n;
};

// Accepts structure as an argument
// using call by reference method
void increment(number& n2)
{
    n2.n++;
}

void initializeFunction()
{
    number n1;

    // assigning value to n
    n1.n = 10;

    cout << " number before calling "
        << "increment function:"
        << n1.n << endl;

    // calling increment function
    increment(n1);

    cout << "number after calling"
        << " increment function:" << n1.n;
}

// Driver code
int main()
{
    // Calling function to do required task
    initializeFunction();

    return 0;
C++ 函数 结构 传递参数 引用

评论

6赞 Some programmer dude 2/3/2022
虽然使用命名空间 std 是一个坏习惯,并且通常被认为可以用于小示例,但包含任何头文件都是完全错误的
0赞 Some programmer dude 2/3/2022
至于你的问题,我猜大多数编译器都会将引用实现为指针的一种语法糖。即,生成的汇编代码将传递指向 的指针。n1
2赞 Nathan Pierson 2/3/2022
该行调用函数 ,并作为参数传递。这意味着,对于 的特定调用,它的值 是 的引用。increment(n1);incrementn1incrementn2n1
2赞 Some programmer dude 2/3/2022
也许问题在于理解一般的参考文献?然后将引用视为其他事物的别名。如果,而不是调用 ,你有 ,那么 是 的别名。之后每次使用,您都真的会使用 .increment(n1)number& n2 = n1; n2.n++;n2n1n2n1

答:

2赞 Khushi Bhambri 2/3/2022 #1

由于您将参数递增函数作为参考,因此当您将 n1 传递给它时,如下所示:

increment(n1);

它作为对增量函数的引用传递,这基本上意味着 n1 的别名是用名称 n2 创建的,这意味着每当 n2 发生变化时,它也会反映在 n1 中(因为它们引用的是相同的位置)void increment(number& n2)

此外,将变量作为 Reference 传递意味着允许函数修改变量,而无需通过声明引用变量来创建变量的副本。传递的变量和参数的内存位置是相同的,因此,对参数的任何更改都会反映在变量本身中。

因此,在函数调用:之后递增n1.n

评论

1赞 Shubham Patil 2/3/2022
明白了。。。刚刚经历了这个参考变量(别名)的概念......感谢您的帮助.....另外,根据我所读到的内容,我想在这里提到的一件事是它们不指向相同的位置,而是共享相同的位置(因为只有指针才能指向内存位置而不是引用变量)......如果我错了,请纠正我。