2011-07-26 76 views
0

這裏我寫了一些代碼來從函數中獲取數字的平方,但是return語句並沒有按照我的要求工作,它給了我輸入的相同數字,我想知道背後的原因,如果任何人可以向我解釋...關於函數的返回類型

#include<iostream> 
#include<conio.h> 

using namespace std; 
int square(int &i); 

int main() 
{ 
    cout<<"enter the number whose square you want to find"; 
    int a; 
    cin>>a; 
    square(a); 

    cout<<"the square of the number is"<<a; 
    _getch(); 
    return 0; 
} 

int square(int &i) 
{ 
    return i*i; 
} 

回答

4

您不會獲得結果。 你的行應該是: a = square(a); 從函數中獲取結果。 另一種可能性將是在功能

int square(int &i) 
{ 
    i = i * i; 
    return i; 
} 

後者寫將改變你傳遞給這證明經過參考該函數的變量。


要清楚你要改變的變量這樣做:

void square(int &i) 
{ 
    i = i * i; 
} 

你看有沒有參與回報,但它會改變變量的值。

+0

:i我使用引用,因此沒有必要這樣做,因爲我沒有傳遞任何參數的副本,我正在傳遞參數本身,請再次檢查它:... S – nobalG

+1

@Alfred:'return'不做你認爲它的事情。無論「i」是否爲參考,它的工作原理都是一樣的。如果你想從你的函數中改變'i',你必須指定它。如果你想獲得'return'返回的值,你必須使用函數的結果('i'不是返回的值)。 –

+0

當你想使用引用,那麼你可以使用我給的第二個變體。請注意,在這種情況下返回類型是不必要的,所以你的函數可以返回void,並且你不會在函數中返回'; return i;'。 – Nobody

6

你忽略了返回的值。您應該將其存儲爲:

int value = square(a); 
cout<<"the square of the number is "<< value; 

此外,由於類型只是整型,傳遞引用並不會給您帶來太多優勢。我建議你通過價值使用通行證其可讀性的緣故:

int square(int i) 
{ 
    return i*i; 
} 

-

或者在情況下,如果你參考experimeting,並試圖瞭解它,那麼在這種情況下我會說,你已經存儲在參數本身產品的結果,如:

int square(int &i) 
{ 
    i = i * i; //this updates i here, and at the call site as well 
    return i; 
} 

或者乾脆做到這一點:

int square(int &i) 
{ 
    return i = i*i; //multiply, update, and return - all in one statement! 
} 
+0

:我使用引用,因此沒有必要這樣做,因爲我沒有傳遞任何參數副本,我通過了參數本身,請再次檢查它:... S, – nobalG

1

根據您對答案的評論來判斷,您誤解了通過引用傳遞了什麼,或者您錯誤地理解了回報。

我假設你正在考慮變量我會在你的程序中更新。然而,這種情況並非如此。如果你做了類似...

i = i * i;

那麼是的,你會是正確的。但是,您沒有爲我分配任何值,您只需將其乘以自己並返回結果。此外,如果您真的想根據參考進行此項工作,則不需要返回任何內容,因爲變量將通過參考進行更新。

2

你有一個選擇:

  1. 修改你傳遞的參數,或
  2. 返回一個值,並將其分配給在呼叫範圍內的東西。

你在做什麼square是第二種選擇。你似乎想要第一個。

如果你真正想要的是修改傳入的值,那麼你需要的是這樣的:

void square(int &i) 
{ 
    i = i*i; 
} 
+1

'return 0'?爲什麼??只要說'void square(int&i)'。 – TonyK

+0

好點!固定。 – mwigdahl

2

要麼這樣來做:

a = Square (a) ; // in main() 
    ... 
int Square (int i) // Pass by value -- doesn't change a in main 
    { 
    return i * i ; 
    } 

這樣做:

Square (a) ; // in main() 
    ... 
void Square (int& i) // Pass by reference -- changes a in main 
    { 
    i = i * i ; // No need for a return value 
    } 

確保您在編程其他任何東西之前瞭解差異!