使用&-operator“返回”多个值但没有指针:这是如何工作的?

问题描述 投票:-1回答:1

如果已经提出这个问题我很抱歉,但我在网上找不到类似的问题/例子。

我目前正在大学参加C ++讲座(因为我必须这样做),我已经在以前的讲座中对C语言有了较好的了解。

昨天在演讲中我看到了一些奇怪的东西:我们讨论了如何在不使用指针的情况下在函数内返回多个变量。在C中我会像这样编码(使用指针):

// main.c 

#include <stdio.h>

void foo(int *addr_val_var1, int *addr_val_var2);

int main()
{
  int var1, var2;

  foo(&var1, &var2);
  printf("Results: %d %d \n", var1, var2);
}

void foo(int *addr_val_var1, int *addr_val_var2)
{
  *addr_val_var1 = 5;
  *addr_val_var2 = 7;
}

但是,我的教授说我们不允许使用指针,这是他的解决方案:

// main.cpp 

#include <iostream>
using namespace std;

// forward declarations
void foo(int &var1, int &var2);

int main()
{
    int var1, var2;

    foo(var1, var2);
    cout << "Results: " << var1 << " " << var2 << endl;

}

void foo(int &var1, int &var2)
{
    var1 = 5;
    var2 = 7;
}

这种方法有什么用?我已经在C中尝试了相同的但是它不起作用。据我所知,&-operator(至少在C中)将变量的地址作为参数给出,然后(通常)等待指针变量工作(=按地址返回) - 但在C ++中,这也有点不同?

谢谢

编辑:

好吧它也适用于C,但是怎么样?我根本不知道这个方法,还没有找到任何参考?

c++ c pointers variables return-value
1个回答
0
投票

我相信(因为我不是C ++程序员)

void foo(int &var1, int &var2)

意味着变量var1var2是“引用”。这是一种语法方式,说通过引用而不是通过值传递变量。在体内,编译器现在使用var= 5;中的引用。它取消引用该变量然后分配给它。

当然,在较低级别,这将作为指针实现。

© www.soinside.com 2019 - 2024. All rights reserved.