2012-08-28 103 views
1

我在學習指針和引用,但是我很難理解概念。我需要在主函數中聲明一個變量,然後通過用戶輸入的函數初始化它,而不返回任何內容。我試過了:初始化變量透過函數

#include <iostream> 
using namespace std; 

void input(int &num){ 
    cout << "Enter A Number" << endl; 
    cin >> static_cast<int>(num); 
} 
int main(){ 
    int x; 
    input(x); 
    cout << "The Number You Entered Was " << x << "!" << endl; 
    return 0; 
} 
+2

然後呢? – Vijay

回答

2

你做正確,除了那static_cast<int>那裏。那裏在做什麼?是什麼讓你使用這個演員?

擺脫鑄造,它應該工作。這

cin >> num; 

是你所需要的。

P.S.請記住,在C++術語中,術語初始化爲具有非常明確的含義。形式上,初始化始終是變量定義的一部分。無論您在變量定義後不再對初始化進行哪些更改。在你的情況下,變量x被聲明爲沒有初始值設定項,這意味着它開始使用未初始化的(具有不確定的值)。後來你把一些特定的值到xcin閱讀它,但是這不再初始化(在長期的C++的意思)。

這可能是一些確定的初始值來聲明x一個好主意,像

int x = 0; 

雖然個人我不是「假」初始化的大風扇。

+0

但你不在字符串中閱讀嗎? – Derp

+0

@Derp:String?什麼字符串? 「串」從哪裏來? – AnT

+0

我只是想,你會讀一個字符串,即使它是一個數字。就像用戶輸入「one」一樣。無論如何,我得到未初始化的局部變量x? – Derp

1

您應該刪除static_cast

cin >> num; 

std::cin's operator>>具有采用整數類型的重載。

注意,你是不是通過函數初始化變量的。您通過將一個引用傳遞給一個函數來爲變量賦值。

0

無需爲static_cast東西。你的功能被賦予一個參考int,和你想讀的int。由於您已經傳遞了對變量的引用,因此您的input函數中的更改將反映在調用者中。