2014-12-19 7 views
0

Я пишу программу, которая позволяет пользователю вводить целое число в переменную value и вызывает две альтернативные функции, каждая из которых утроит выбранное целочисленное значение. Функция triple_by_value передает переменное число по значению, утроит параметр и возвращает результат.Call-by-reference и Call-by-value

Функция triple_by_reference передает номер переменной по ссылке и утроит исходное значение числа через опорный параметр.

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Enter a number (-1 to end): "; 
    cin >> value; 

    if (value != -1) 
    { 
     triple_by_value(value); 
     cout << "Triple-By-Value: " << value << endl; 
     triple_by_reference(value); 
     cout << "Triple-By-Reference: " << value << endl; 
    } 
    return 0; 
} 

int triple_by_value(int value) 
{ 
    value *= 3; 
    return value; 
} 

int triple_by_reference(int &value) 
{ 
    value *= 3; 
    return value; 
} 

Кажется, у меня проблема, когда функция triple_by_value не является, а, утроением значения, просто печатая его как есть.

Любая помощь будет высоко оценена.

+4

«Функция TripleByValue передает значение переменной по значению, утроит параметр и возвращает результат». и ваш код быстро удалит этот результат. –

+3

Как будто вы прекрасно объясняете свой код, а затем как-то забываете, что вы только что сказали: p – keyser

+0

@keyser Я получаю это иногда xD – Leo

ответ

3

Как следует из названия, передача переменной по значению означает, что функция получает значение переменной и не имеет доступа к самой переменной.

В вашем примере int value представляет собой совершенно другую переменную от value в main, просто так, что она имеет такое же значение. Однако int &value является ссылкой на value в main, что означает, что можно с уверенностью думать о нем как о value в main.

Если вы напечатаете value в triple_by_value после value *= 3, вы получите то значение, которое хотите. Если вы хотите, чтобы value в main получили новое значение, вы можете присвоить новое значение value в main, выполнив value = triple_by_value(value); в main или просто используйте triple_by_reference.

+0

Кажется, что я не заметил, что я создал новую переменную внутри функции. Большое спасибо! – Leo

+0

Хотя мой учитель утроил значение, используя значение по умолчанию. Как так? – Leo

+0

@ LeonardoNammour Это упоминается в моем ответе. – Nard

Смежные вопросы