如果已经提出这个问题我很抱歉,但我在网上找不到类似的问题/例子。
我目前正在大学参加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 ++程序员)
void foo(int &var1, int &var2)
意味着变量var1
和var2
是“引用”。这是一种语法方式,说通过引用而不是通过值传递变量。在体内,编译器现在使用var= 5;
中的引用。它取消引用该变量然后分配给它。
当然,在较低级别,这将作为指针实现。