關於

2017-04-16 51 views
0

我目前停留在這個問題,但不知道簡單的C++函數的困惑是什麼,我做錯了:關於

完成的功能ADD10()來使程序 可以添加10到每個用戶輸入整數。 (注意:您應該只改變功能ADD10()的代碼,但不要改變其他代碼。)

提供給我的原始代碼是這樣的:

#include <iostream> 
#include <iomanip> 
using namespace std; 

//TODO: complete this function, do NOT change other code 
void add10() 
{ 

} 

//Please do NOT change the following code 
void main() 
{ 
    int n; 
    cin >> n; 
    add10(n); 
    cout << n; 
} 

我已編輯上面的代碼,如圖下面,但它仍返回相同的值用戶輸入:

#include <iostream> 
#include <iomanip> 
using namespace std; 

//TODO: complete this function, do NOT change other code 
int add10(int n) 
{ 
    return n += 10; 
} 

//Please do NOT change the following code 
void main() 
{ 
    int n; 
    cin >> n; 
    add10(n); 
    cout << n; 
} 

是否有人可以幫我解釋一下如何解決我的代碼和我在做什麼錯?謝謝!

回答

2

正如您從main代碼中看到的那樣,add10的返回值將被丟棄。這意味着你可以只聲明它void並且什麼都不返回。

而是修改傳遞給你的函數的參數值,你想通過引用傳遞它:

void add10(int& n) 

這將允許你在add10功能進行明顯修改的n

考慮閱讀關於傳遞引用的一些教程,here就是一個例子。

Here是關於通過價值和參考傳遞參數之間的差異的SO問題。

+0

好吧,我想我明白你的意思。在價值傳遞和引用傳遞的概念之間,我不太清楚。如果不是太麻煩,你能簡單地解釋兩者之間的區別嗎? –

+1

@RajHeera我可以,但這是另一個單獨的問題,已經回答了很多次,所以我只是添加一個鏈接到我的答案 – Ap31

+0

完美,感謝您的寶貴幫助。將更多地理解這些基本概念。 –

0

如果你只是想打印的價值,你能

cout<<add10(n); 

如果你需要爲將來使用的價值,正確的方法是通過它的一個參考,所以這將是

add10(n); 

你的方法簽名會

void add10(int &n) 
+0

根本不是。問題是關於參考而不是返回值。 – N0un

+0

@ N0un謝謝你告訴我,我甚至沒有注意到我有一段時間是多麼的錯誤。 –

+0

@ Dinos_12345 'cout << add10(&n);' - 這不是通過引用傳遞的,它傳遞的是地址,所以方法應該指向一個指向整數的指針作爲參數 – maxx777

0

你需要一個參考... C++將變量n的副本,再走克原始值未修改無論你在函數ADD10做什麼...

int add10(int& n) 
{ 
    return n += 10; 
} 

更好的方法可能是返回void因爲在main方法代碼沒有抓住這一結果要麼...

void add10(int& n) 
{ 
    n += 10; 
} 
+0

原始函數應該返回一個'void'。 – N0un

+0

@ N0un閱讀我的答案 –

+0

閱讀他的問題,原始原型已經是'void add10()'。 – N0un