很抱歉,如果已经问过这个问题,但我在网上找不到类似的问题/示例。
我目前正在大学里参观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语言中使用,但是如何呢?我根本不知道这种方法,也没有找到任何参考?
答案 0 :(得分:0)
我相信(因为我不是C ++程序员)
void foo(int &var1, int &var2)
表示变量var1
和var2
是“引用”。这是一种语法形式,表示变量是通过引用而不是通过值传递的。现在,在主体中,编译器使用var= 5;
中的引用。它取消引用该变量,然后将其赋值。
当然,在较低级别上,它将被实现为指针。