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

时间:2019-03-16 08:59:10

标签: c++ c pointers variables return-value

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

我目前正在大学里参观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中尝试了相同的操作,但是没有用。据我所知,&运算符(至少在C中)给出变量的地址作为参数,然后(通常)等待指针变量起作用(按地址返回)-但是在C ++中,这也以某种方式起作用?

谢谢

编辑

好的,它也可以在C语言中使用,但是如何呢?我根本不知道这种方法,也没有找到任何参考?

1 个答案:

答案 0 :(得分:0)

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

void foo(int &var1, int &var2)

表示变量var1var2是“引用”。这是一种语法形式,表示变量是通过引用而不是通过值传递的。现在,在主体中,编译器使用var= 5;中的引用。它取消引用该变量,然后将其赋值。

当然,在较低级别上,它将被实现为指针。