Извините, если это уже было задано, но я не смог найти похожий вопрос / пример в сети.
В настоящее время я посещаю лекции по 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 ++ это также как-то работает по-другому ?
Спасибо
EDIT
ОК, это также работает в C, но как? Я вообще не знал этот метод и не нашел ссылки?